ash: catch error in arithmetic expansion in PS1
No binary (build failed)
—
(log yok)
| @@ -13043,6 +13043,9 @@ expandstr(const char *ps, int syntax_type) | |
| union node n; | |
| int saveprompt; | |
| struct parsefile *file_stop = g_parsefile; | |
| + | volatile int saveint; |
| + | struct jmploc *volatile savehandler = exception_handler; |
| + | struct jmploc jmploc; |
| /* XXX Fix (char *) cast. */ | |
| setinputstring((char *)ps); | |
| @@ -13054,18 +13057,13 @@ expandstr(const char *ps, int syntax_type) | |
| * Try a prompt with syntactically wrong command: | |
| * PS1='$(date "+%H:%M:%S) > ' | |
| */ | |
| - | { |
| - | volatile int saveint; |
| - | struct jmploc *volatile savehandler = exception_handler; |
| - | struct jmploc jmploc; |
| - | SAVE_INT(saveint); |
| - | if (setjmp(jmploc.loc) == 0) { |
| - | exception_handler = &jmploc; |
| - | readtoken1(pgetc(), syntax_type, FAKEEOFMARK, 0); |
| - | } |
| - | exception_handler = savehandler; |
| - | RESTORE_INT(saveint); |
| + | SAVE_INT(saveint); |
| + | if (setjmp(jmploc.loc) == 0) { |
| + | exception_handler = &jmploc; |
| + | readtoken1(pgetc(), syntax_type, FAKEEOFMARK, 0); |
| } | |
| + | exception_handler = savehandler; |
| + | RESTORE_INT(saveint); |
| doprompt = saveprompt; | |
| @@ -13077,7 +13075,17 @@ expandstr(const char *ps, int syntax_type) | |
| n.narg.text = wordtext; | |
| n.narg.backquote = backquotelist; | |
| - | expandarg(&n, NULL, EXP_QUOTED); |
| + | /* expandarg() might fail too: |
| + | * PS1='$((123+))' |
| + | */ |
| + | SAVE_INT(saveint); |
| + | if (setjmp(jmploc.loc) == 0) { |
| + | exception_handler = &jmploc; |
| + | expandarg(&n, NULL, EXP_QUOTED); |
| + | } |
| + | exception_handler = savehandler; |
| + | RESTORE_INT(saveint); |
| + | |
| return stackblock(); | |
| } | |