Re: [PATCH] grep: correctly initialize help-all option

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am 09.04.2015 um 15:41 schrieb Patrick Steinhardt:
The "help-all" option is being initialized with a wrong value.
While being semantically wrong this can also cause a gcc
segmentation fault on ARMv7 hardfloat platforms with a hardened
toolchain. Fix this by initializing with the correct value.

Thanks for your report and patch.  A few comments:

Sign-off?  (See "Sign your work" in Documentation/SubmittingPatches)

---
  builtin/grep.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/builtin/grep.c b/builtin/grep.c
index abc4400..c0bf005 100644
--- a/builtin/grep.c
+++ b/builtin/grep.c
@@ -738,7 +738,7 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
  			PARSE_OPT_OPTARG, NULL, (intptr_t)default_pager },
  		OPT_BOOL(0, "ext-grep", &external_grep_allowed__ignored,
  			 N_("allow calling of grep(1) (ignored by this build)")),
-		{ OPTION_CALLBACK, 0, "help-all", &options, NULL, N_("show usage"),
+		{ OPTION_CALLBACK, 0, "help-all", &opt, NULL, N_("show usage"),
  		  PARSE_OPT_HIDDEN | PARSE_OPT_NOARG, help_callback },
  		OPT_END()
  	};

help_callback() returns -1 immediately, IOW the value pointer is never used anyway. So why does your change make a difference? *puzzled*

We could pass NULL instead, as in builtin/show-ref.c, which would make it clear that the pointer is just a dummy.

Q: Why does the callback exist in the first place? A: parse_options() handles -h and --help-all automatically by showing the list of available options. This is good for most commands for consistency's sake, but bad for commands that want to use -h for something else. That's why it can be turned off with the flag PARSE_OPT_NO_INTERNAL_HELP, but that flag disables the long option as well. It's added back by grep and show-ref explicitly, to at least provide --help-all consistently across all commands.

We could solve this problem centrally by checking for -h and --help-all only after looking through the struct option list supplied to parse_options_step() instead of before and getting rid of the then unneeded callbacks for --help-all in grep and show-ref. Are there any downsides to that approach?

René

--
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




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]