The previous code used strtoul() without any checks that it succeeded. Instead use convert_l(), in strict mode, and die() if there is an error. This tightens up the parsing: * Leading whitespace is no longer allowed * '+' and '-' are no longer allowed * Trailing junk is not allowed Signed-off-by: Michael Haggerty <mhagger@xxxxxxxxxxxx> --- diff.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/diff.c b/diff.c index abc32c8..a350677 100644 --- a/diff.c +++ b/diff.c @@ -2,6 +2,7 @@ * Copyright (C) 2005 Junio C Hamano */ #include "cache.h" +#include "numparse.h" #include "quote.h" #include "diff.h" #include "diffcore.h" @@ -2393,12 +2394,12 @@ static void builtin_diff(const char *name_a, xecfg.flags |= XDL_EMIT_FUNCCONTEXT; if (pe) xdiff_set_find_func(&xecfg, pe->pattern, pe->cflags); - if (!diffopts) - ; - else if (skip_prefix(diffopts, "--unified=", &v)) - xecfg.ctxlen = strtoul(v, NULL, 10); - else if (skip_prefix(diffopts, "-u", &v)) - xecfg.ctxlen = strtoul(v, NULL, 10); + if (diffopts + && (skip_prefix(diffopts, "--unified=", &v) || + skip_prefix(diffopts, "-u", &v))) { + if (convert_l(v, 10, &xecfg.ctxlen)) + die("--unified argument must be a non-negative integer"); + } if (o->word_diff) init_diff_words_data(&ecbdata, o, one, two); xdi_diff_outf(&mf1, &mf2, fn_out_consume, &ecbdata, -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html