hush: fix a segfault in export builtin
authorDenys Vlasenko <vda.linux@googlemail.com>
Sun, 7 Jun 2009 14:04:17 +0000 (16:04 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 7 Jun 2009 14:04:17 +0000 (16:04 +0200)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
shell/hush.c

index e827660936cf6df515b9d506440dac97c9c871b5..6c20615fa58487228477f1f2c3222abddfff8c5b 100644 (file)
@@ -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;