Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
[PATCH] Fix zparseopts segfault
- X-seq: zsh-workers 53988
- From: Joshua Krusell <js.shirin@xxxxxxxxx>
- To: zsh-workers@xxxxxxx
- Subject: [PATCH] Fix zparseopts segfault
- Date: Mon, 6 Oct 2025 10:47:28 +0200
- Archived-at: <https://zsh.org/workers/53988>
- List-id: <zsh-workers.zsh.org>
Hi all,
Commit d051857e0 introduced a null dereference bug in bin_zparseopts. If
the parameter argument to `-v` in zparseopts is unset or not an array,
then getaparam will return NULL and zsh will segfault.
Feel free to change the error message in the patch if there's something
better.
/jsks
---
Src/Modules/zutil.c | 4 ++++
Test/V12zparseopts.ztst | 19 +++++++++++++++++++
2 files changed, 23 insertions(+)
diff --git a/Src/Modules/zutil.c b/Src/Modules/zutil.c
index 676fe1872..a129cc5fe 100644
--- a/Src/Modules/zutil.c
+++ b/Src/Modules/zutil.c
@@ -1953,6 +1953,10 @@ bin_zparseopts(char *nam, char **args, UNUSED(Options ops), UNUSED(int func))
}
}
params = getaparam((paramsname = paramsname ? paramsname : "argv"));
+ if (!params) {
+ zwarnnam(nam, "no such array: %s", paramsname);
+ return 1;
+ }
np = cp = pp = ((extract && del) ? arrdup(params) : params);
for (; (o = *pp); pp++) {
/* Not an option. With GNU style, this includes '-' */
diff --git a/Test/V12zparseopts.ztst b/Test/V12zparseopts.ztst
index e6139ea5e..41c21b304 100644
--- a/Test/V12zparseopts.ztst
+++ b/Test/V12zparseopts.ztst
@@ -111,6 +111,25 @@
0:zparseopts -v
>ret: 0, optv: -a -b -c, argvv: 1 2 3, argv: -x -y -z 7 8 9
+ () {
+ local -a optv
+ zparseopts -a optv -v argvv - a
+ print -r - ret: $?, optv: $optv, argv: $argv
+ } -a
+0:zparseopts -v with unset parameter
+?(anon):zparseopts:2: no such array: argvv
+>ret: 1, optv: , argv: -a
+
+ () {
+ local -a optv
+ local argvv=1
+ zparseopts -a optv -v argvv - a
+ print -r - ret: $?, optv: $optv, argv: $argv
+ } -a
+0:zparseopts -v with non-array argument
+?(anon):zparseopts:3: no such array: argvv
+>ret: 1, optv: , argv: -a
+
() {
local -a optv aa ab
zparseopts -a optv - a=aa b:=ab c:- z
--
2.51.0
Messages sorted by:
Reverse Date,
Date,
Thread,
Author