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/glob.c | |
parent | 0672c753596bd454e7456fe660eab1b8bf2879d1 (diff) | |
download | zsh-e51c9c17af51e4055efb5a2cc36739d1d7ae457f.tar.gz zsh-e51c9c17af51e4055efb5a2cc36739d1d7ae457f.tar.xz zsh-e51c9c17af51e4055efb5a2cc36739d1d7ae457f.zip |
40453: signal handler safety for callers of patcompile(PAT_STATIC), which is not re-entrant.
Diffstat (limited to 'Src/glob.c')
-rw-r--r-- | Src/glob.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/Src/glob.c b/Src/glob.c index 623e6f1d6..ff6b2583b 100644 --- a/Src/glob.c +++ b/Src/glob.c @@ -2462,13 +2462,20 @@ xpandbraces(LinkList list, LinkNode *np) int matchpat(char *a, char *b) { - Patprog p = patcompile(b, PAT_STATIC, NULL); + Patprog p; + int ret; - if (!p) { + queue_signals(); /* Protect PAT_STATIC */ + + if (!(p = patcompile(b, PAT_STATIC, NULL))) { zerr("bad pattern: %s", b); - return 0; - } - return pattry(p, a); + ret = 0; + } else + ret = pattry(p, a); + + unqueue_signals(); + + return ret; } /* do the ${foo%%bar}, ${foo#bar} stuff */ |