aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-06-07 16:04:17 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2009-06-07 16:04:17 +0200
commitdf5131cf3dd2c3d4e53c64b8b73f6cd18b46f6d3 (patch)
treee243fbd828e4d430a6be01baa920798de9ed74c4
parent8f24f9812df8dec34a991b2c572092639586f154 (diff)
downloadbusybox-w32-df5131cf3dd2c3d4e53c64b8b73f6cd18b46f6d3.tar.gz
busybox-w32-df5131cf3dd2c3d4e53c64b8b73f6cd18b46f6d3.tar.bz2
busybox-w32-df5131cf3dd2c3d4e53c64b8b73f6cd18b46f6d3.zip
hush: fix a segfault in export builtin
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--shell/hush.c25
1 files 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)
6825{ 6825{
6826 unsigned opt_unexport; 6826 unsigned opt_unexport;
6827 6827
6828 if (argv[1] == NULL) { 6828#if ENABLE_HUSH_EXPORT_N
6829 /* "!": do not abort on errors */
6830 opt_unexport = getopt32(argv, "!n");
6831 if (opt_unexport == (uint32_t)-1)
6832 return EXIT_FAILURE;
6833 argv += optind;
6834#else
6835 opt_unexport = 0;
6836 argv++;
6837#endif
6838
6839 if (argv[0] == NULL) {
6829 char **e = environ; 6840 char **e = environ;
6830 if (e) { 6841 if (e) {
6831 while (*e) { 6842 while (*e) {
@@ -6851,18 +6862,6 @@ static int FAST_FUNC builtin_export(char **argv)
6851 return EXIT_SUCCESS; 6862 return EXIT_SUCCESS;
6852 } 6863 }
6853 6864
6854#if ENABLE_HUSH_EXPORT_N
6855 /* "!": do not abort on errors */
6856 /* "+": stop at 1st non-option */
6857 opt_unexport = getopt32(argv, "!+n");
6858 if (opt_unexport == (unsigned)-1)
6859 return EXIT_FAILURE;
6860 argv += optind;
6861#else
6862 opt_unexport = 0;
6863 argv++;
6864#endif
6865
6866 helper_export_local(argv, (opt_unexport ? -1 : 1), 0); 6865 helper_export_local(argv, (opt_unexport ? -1 : 1), 0);
6867 6866
6868 return EXIT_SUCCESS; 6867 return EXIT_SUCCESS;