In this example:
ash -c 'readonly x; echo $(command eval x=2)'
evalstring() is called after forkchild(), which calls popallfiles().
On exception, evalstring() will popfile().
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
{
struct parsefile *pf = g_parsefile;
+ if (pf == &basepf)
+ return;
+
INT_OFF;
if (pf->pf_fd >= 0)
close(pf->pf_fd);
static int
evalstring(char *s, int flags)
{
- struct jmploc *volatile savehandler = exception_handler;
+ struct jmploc *volatile savehandler;
struct jmploc jmploc;
int ex;
* But if we skip popfile(), we hit EOF in eval's string, and exit.
*/
savehandler = exception_handler;
- exception_handler = &jmploc;
ex = setjmp(jmploc.loc);
if (ex)
goto out;
+ exception_handler = &jmploc;
while ((n = parsecmd(0)) != NODE_EOF) {
int i;