From 1ece724b1ca7f71542bfef42795fce798563ecde Mon Sep 17 00:00:00 2001 From: Mohit Marathe Date: Tue, 16 Jan 2024 19:43:02 +0530 Subject: [PATCH] patch-id: replace `atoi()` with `strtol_i2()` The change is made to improve the error-handling capabilities during the conversion of string representations to integers. The `strtol_i2(` function offers a more robust mechanism for converting strings to integers by providing enhanced error detection. Unlike `atoi(`, `strtol_i2(` 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 --- builtin/patch-id.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/builtin/patch-id.c b/builtin/patch-id.c index 3894d2b970612c..6bfb263de5e68d 100644 --- a/builtin/patch-id.c +++ b/builtin/patch-id.c @@ -1,3 +1,4 @@ +#include "git-compat-util.h" #include "builtin.h" #include "config.h" #include "diff.h" @@ -29,33 +30,32 @@ 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_i2(q, 10, p_before, &endp) != 0) + return 0; n = strspn(q, digits); } else { *p_before = 1; } - if (n == 0 || q[n] != ' ' || q[n+1] != '+') + if (q[n] != ' ' || q[n+1] != '+') return 0; r = q + n + 2; n = strspn(r, digits); if (r[n] == ',') { r += n + 1; - *p_after = atoi(r); - n = strspn(r, digits); + if (strtol_i2(r, 10, p_after, &endp) != 0) + return 0; } else { *p_after = 1; } - if (n == 0) - return 0; - return 1; }