hush: fix a segfault in export builtin
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
8f24f9812d
commit
df5131cf3d
25
shell/hush.c
25
shell/hush.c
@ -6825,7 +6825,18 @@ static int FAST_FUNC builtin_export(char **argv)
|
|||||||
{
|
{
|
||||||
unsigned opt_unexport;
|
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;
|
char **e = environ;
|
||||||
if (e) {
|
if (e) {
|
||||||
while (*e) {
|
while (*e) {
|
||||||
@ -6851,18 +6862,6 @@ static int FAST_FUNC builtin_export(char **argv)
|
|||||||
return EXIT_SUCCESS;
|
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);
|
helper_export_local(argv, (opt_unexport ? -1 : 1), 0);
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user