Skip to content

Commit 3b723f7

Browse files
avargitster
authored andcommitted
parse-options.h: move PARSE_OPT_SHELL_EVAL between enums
Fix a bad landmine of a bug which has been with us ever since PARSE_OPT_SHELL_EVAL was added in 47e9cd2 (parseopt: wrap rev-parse --parseopt usage for eval consumption, 2010-06-12). It's an argument to parse_options() and should therefore be in "enum parse_opt_flags", but it was added to the per-option "enum parse_opt_option_flags" by mistake. Therefore as soon as we'd have an enum member in the former that reached its value of "1 << 8" we'd run into a seemingly bizarre bug where that new option would turn on the unrelated PARSE_OPT_SHELL_EVAL in "git rev-parse --parseopt" by proxy. I manually checked that no other enum members suffered from such overlap, by setting the values to non-overlapping values, and making the relevant codepaths BUG() out if the given value was above/below the expected (excluding flags=0 in the case of "enum parse_opt_flags"). Signed-off-by: Ævar Arnfjörð Bjarmason <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent cefe983 commit 3b723f7

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

parse-options.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ enum parse_opt_flags {
3333
PARSE_OPT_KEEP_UNKNOWN = 1 << 3,
3434
PARSE_OPT_NO_INTERNAL_HELP = 1 << 4,
3535
PARSE_OPT_ONE_SHOT = 1 << 5,
36+
PARSE_OPT_SHELL_EVAL = 1 << 6,
3637
};
3738

3839
enum parse_opt_option_flags {
@@ -44,7 +45,6 @@ enum parse_opt_option_flags {
4445
PARSE_OPT_NODASH = 1 << 5,
4546
PARSE_OPT_LITERAL_ARGHELP = 1 << 6,
4647
PARSE_OPT_FROM_ALIAS = 1 << 7,
47-
PARSE_OPT_SHELL_EVAL = 1 << 8,
4848
PARSE_OPT_NOCOMPLETE = 1 << 9,
4949
PARSE_OPT_COMP_ARG = 1 << 10,
5050
PARSE_OPT_CMDMODE = 1 << 11,

0 commit comments

Comments
 (0)