Skip to content

Commit

Permalink
patch-id: replace atoi() with strtol_i_updated()
Browse files Browse the repository at this point in the history
The change is made to improve the error-handling capabilities
during the conversion of string representations to integers.
The `strtol_i_updated(` function offers a more robust mechanism for
converting strings to integers by providing enhanced error
detection. Unlike `atoi(`, `strtol_i_updated(` allows the code to
differentiate between a valid conversion and an invalid one,
offering better resilience against potential issues such as
reading hunk header of a corrupted patch.

Signed-off-by: Mohit Marathe <mohitmarathe@proton.me>
  • Loading branch information
mohit-marathe committed Jan 24, 2024
1 parent 60ea85a commit 0e11719
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions builtin/patch-id.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#include "git-compat-util.h"
#include "builtin.h"
#include "config.h"
#include "diff.h"
Expand Down Expand Up @@ -29,14 +30,18 @@ static int scan_hunk_header(const char *p, int *p_before, int *p_after)
{
static const char digits[] = "0123456789";
const char *q, *r;
char *endp;
int n;

q = p + 4;
n = strspn(q, digits);
if (q[n] == ',') {
q += n + 1;
*p_before = atoi(q);
if (strtol_i_updated(q, 10, p_before, &endp) != 0)
return 0;
n = strspn(q, digits);
if (endp != q + n)
return 0;
} else {
*p_before = 1;
}
Expand All @@ -48,8 +53,11 @@ static int scan_hunk_header(const char *p, int *p_before, int *p_after)
n = strspn(r, digits);
if (r[n] == ',') {
r += n + 1;
*p_after = atoi(r);
if (strtol_i_updated(r, 10, p_after, &endp) != 0)
return 0;
n = strspn(r, digits);
if (endp != q + n)
return 0;
} else {
*p_after = 1;
}
Expand Down

0 comments on commit 0e11719

Please sign in to comment.