diff options
author | Nguyễn Thái Ngọc Duy <pclouds@gmail.com> | 2019-05-29 12:11:16 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2019-05-29 21:04:33 +0300 |
commit | f7e68a08780e91d7c2f830f33457041407172b96 (patch) | |
tree | b157b6f56ef18c90bb56f543d196320e03cfde85 /parse-options-cb.c | |
parent | 8ef05193bcdda6a28cd41fa3ecd8f356061d49e0 (diff) |
parse-options: check empty value in OPT_INTEGER and OPT_ABBREV
When parsing the argument for OPT_INTEGER and OPT_ABBREV, we check if we
can parse the entire argument to a number with "if (*s)". There is one
missing check: if "arg" is empty to begin with, we fail to notice.
This could happen with long option by writing like
git diff --inter-hunk-context= blah blah
Before 16ed6c97cc (diff-parseopt: convert --inter-hunk-context,
2019-03-24), --inter-hunk-context is handled by a custom parser
opt_arg() and does detect this correctly.
This restores the bahvior for --inter-hunk-context and make sure all
other integer options are handled the same (sane) way. For OPT_ABBREV
this is new behavior. But it makes it consistent with the rest.
PS. OPT_MAGNITUDE has similar code but git_parse_ulong() does detect
empty "arg". So it's good to go.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'parse-options-cb.c')
-rw-r--r-- | parse-options-cb.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/parse-options-cb.c b/parse-options-cb.c index 2733393546..02293493b0 100644 --- a/parse-options-cb.c +++ b/parse-options-cb.c @@ -16,6 +16,9 @@ int parse_opt_abbrev_cb(const struct option *opt, const char *arg, int unset) if (!arg) { v = unset ? 0 : DEFAULT_ABBREV; } else { + if (!*arg) + return error(_("option `%s' expects a numerical value"), + opt->long_name); v = strtol(arg, (char **)&arg, 10); if (*arg) return error(_("option `%s' expects a numerical value"), |