From df5131cf3dd2c3d4e53c64b8b73f6cd18b46f6d3 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sun, 7 Jun 2009 16:04:17 +0200 Subject: [PATCH] hush: fix a segfault in export builtin Signed-off-by: Denys Vlasenko --- shell/hush.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/shell/hush.c b/shell/hush.c index e82766093..6c20615fa 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -6825,7 +6825,18 @@ static int FAST_FUNC builtin_export(char **argv) { unsigned opt_unexport; - if (argv[1] == NULL) { +#if ENABLE_HUSH_EXPORT_N + /* "!": do not abort on errors */ + opt_unexport = getopt32(argv, "!n"); + if (opt_unexport == (uint32_t)-1) + return EXIT_FAILURE; + argv += optind; +#else + opt_unexport = 0; + argv++; +#endif + + if (argv[0] == NULL) { char **e = environ; if (e) { while (*e) { @@ -6851,18 +6862,6 @@ static int FAST_FUNC builtin_export(char **argv) return EXIT_SUCCESS; } -#if ENABLE_HUSH_EXPORT_N - /* "!": do not abort on errors */ - /* "+": stop at 1st non-option */ - opt_unexport = getopt32(argv, "!+n"); - if (opt_unexport == (unsigned)-1) - return EXIT_FAILURE; - argv += optind; -#else - opt_unexport = 0; - argv++; -#endif - helper_export_local(argv, (opt_unexport ? -1 : 1), 0); return EXIT_SUCCESS;