diff options
| author | Oliver Kiddle <opk@zsh.org> | 2025-10-31 10:54:49 +0100 |
|---|---|---|
| committer | Oliver Kiddle <opk@zsh.org> | 2025-10-31 10:55:03 +0100 |
| commit | a3547fd4c165bd6c0c9c9d2643bd61b593f7bbaf (patch) | |
| tree | 98ca9353cdc27435e3479707095e50d3900b7868 | |
| parent | 54012: fix use of out of scope array variable (diff) | |
| download | zsh-a3547fd4c165bd6c0c9c9d2643bd61b593f7bbaf.tar zsh-a3547fd4c165bd6c0c9c9d2643bd61b593f7bbaf.tar.gz zsh-a3547fd4c165bd6c0c9c9d2643bd61b593f7bbaf.tar.bz2 zsh-a3547fd4c165bd6c0c9c9d2643bd61b593f7bbaf.tar.lz zsh-a3547fd4c165bd6c0c9c9d2643bd61b593f7bbaf.tar.xz zsh-a3547fd4c165bd6c0c9c9d2643bd61b593f7bbaf.tar.zst zsh-a3547fd4c165bd6c0c9c9d2643bd61b593f7bbaf.zip | |
54013: add a range check on signal numbers passed to trap
| -rw-r--r-- | ChangeLog | 3 | ||||
| -rw-r--r-- | Src/builtin.c | 8 | ||||
| -rw-r--r-- | Src/jobs.c | 6 |
3 files changed, 16 insertions, 1 deletions
@@ -1,5 +1,8 @@ 2025-10-31 Oliver Kiddle <opk@zsh.org> + * 54013: Src/builtin.c, Src/jobs.c: add a range check on signal + numbers passed to trap + * 54012: Src/subst.c: fix use of out of scope array variable * 54007: Src/exec.c, Src/hist.c, Src/init.c, Src/jobs.c, Src/module.c, diff --git a/Src/builtin.c b/Src/builtin.c index 5dd4fee01..23067abe1 100644 --- a/Src/builtin.c +++ b/Src/builtin.c @@ -7428,6 +7428,14 @@ bin_trap(char *name, char **argv, UNUSED(Options ops), UNUSED(int func)) return 1; } + if (!*argv) { + if (idigit(*arg) || !strncmp(arg, "SIG", 3)) + zwarnnam(name, "undefined signal: %s", arg); + else + zwarnnam(name, "signal expected"); + return 1; + } + /* set traps */ for (; *argv; argv++) { Eprog t; diff --git a/Src/jobs.c b/Src/jobs.c index 31938bedd..4905ae925 100644 --- a/Src/jobs.c +++ b/Src/jobs.c @@ -3054,7 +3054,11 @@ getsigidx(const char *s) /* check for a signal specified by number */ x = atoi(s); - if (idigit(*s) && x >= 0) + if (idigit(*s) && x >= 0 && (x < VSIGCOUNT +#if defined(SIGRTMIN) && defined(SIGRTMAX) + || (x >= SIGRTMIN && x <= SIGRTMAX) +#endif + )) return SIGIDX(x); /* search for signal by name */ |
