[git commit] hush: fix a segfault in export builtin

Denys Vlasenko vda.linux at googlemail.com
Sun Jun 7 14:04:17 UTC 2009


commit: http://git.busybox.net/busybox/commit/?id=df5131cf3dd2c3d4e53c64b8b73f6cd18b46f6d3
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master


Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 shell/hush.c |   25 ++++++++++++-------------
 1 files changed, 12 insertions(+), 13 deletions(-)

diff --git a/shell/hush.c b/shell/hush.c
index e827660..6c20615 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;
-- 
1.6.0.6


More information about the busybox-cvs mailing list