ash: survive failures in $PS1 expansion. Closes 10371

function                                             old     new   delta
expandstr                                            120     209     +89

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2017-10-12 19:20:13 +02:00
parent 0fd5dbba8f
commit a2e32b324e

View File

@ -12656,7 +12656,24 @@ expandstr(const char *ps, int syntax_type)
saveprompt = doprompt;
doprompt = 0;
readtoken1(pgetc(), syntax_type, FAKEEOFMARK, 0);
/* readtoken1() might die horribly.
* Try a prompt with syntacticallyt 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);
}
doprompt = saveprompt;
popfile();