summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Kiddle <opk@zsh.org>2025-10-31 10:54:49 +0100
committerOliver Kiddle <opk@zsh.org>2025-10-31 10:55:03 +0100
commita3547fd4c165bd6c0c9c9d2643bd61b593f7bbaf (patch)
tree98ca9353cdc27435e3479707095e50d3900b7868
parent54012: fix use of out of scope array variable (diff)
downloadzsh-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--ChangeLog3
-rw-r--r--Src/builtin.c8
-rw-r--r--Src/jobs.c6
3 files changed, 16 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 9e5110098..b7b58541a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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 */