diff options
| author | Barton E. Schaefer <schaefer@zsh.org> | 2017-01-29 08:30:14 -0800 |
|---|---|---|
| committer | Barton E. Schaefer <schaefer@zsh.org> | 2017-01-29 08:30:14 -0800 |
| commit | e51c9c17af51e4055efb5a2cc36739d1d7ae457f (patch) | |
| tree | b77de131860f9f0d48ed0604d095a82c59665a1a /Src/cond.c | |
| parent | 40439: PAT_HEAPDUP definition just for clarity (diff) | |
| download | zsh-e51c9c17af51e4055efb5a2cc36739d1d7ae457f.tar zsh-e51c9c17af51e4055efb5a2cc36739d1d7ae457f.tar.gz zsh-e51c9c17af51e4055efb5a2cc36739d1d7ae457f.tar.bz2 zsh-e51c9c17af51e4055efb5a2cc36739d1d7ae457f.tar.lz zsh-e51c9c17af51e4055efb5a2cc36739d1d7ae457f.tar.xz zsh-e51c9c17af51e4055efb5a2cc36739d1d7ae457f.tar.zst zsh-e51c9c17af51e4055efb5a2cc36739d1d7ae457f.zip | |
40453: signal handler safety for callers of patcompile(PAT_STATIC), which is not re-entrant.
Diffstat (limited to 'Src/cond.c')
| -rw-r--r-- | Src/cond.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/Src/cond.c b/Src/cond.c index 42e9de30f..8ab019307 100644 --- a/Src/cond.c +++ b/Src/cond.c @@ -295,6 +295,8 @@ evalcond(Estate state, char *fromtest) int test, npat = state->pc[1]; Patprog pprog = state->prog->pats[npat]; + queue_signals(); + if (pprog == dummy_patprog1 || pprog == dummy_patprog2) { char *opat; int save; @@ -308,6 +310,7 @@ evalcond(Estate state, char *fromtest) if (!(pprog = patcompile(right, (save ? PAT_ZDUP : PAT_STATIC), NULL))) { zwarnnam(fromtest, "bad pattern: %s", right); + unqueue_signals(); return 2; } else if (save) @@ -316,6 +319,8 @@ evalcond(Estate state, char *fromtest) state->pc += 2; test = (pprog && pattry(pprog, left)); + unqueue_signals(); + return !(ctype == COND_STRNEQ ? !test : test); } case COND_STRLT: |
