From a4375f3090f3637fae40c5a0e24d2f555250db75 Mon Sep 17 00:00:00 2001 From: Martijn Dekker Date: Mon, 15 Nov 2021 03:18:18 +0100 Subject: [PATCH] Fix crash on unsetting .sh.match ksh crashed after unsetting .sh.match and then matching a pattern: $ unset .sh.match $ [[ bar == ba* ]] Memory fault src/cmd/ksh93/sh/init.c: sh_setmatch(): - Do nothing if we cannot get an array pointer to SH_MATCHNOD. --- NEWS | 2 ++ src/cmd/ksh93/sh/init.c | 3 +++ 2 files changed, 5 insertions(+) diff --git a/NEWS b/NEWS index fff087db3..6ee8a9a33 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,8 @@ Any uppercase BUG_* names are modernish shell bug IDs. 2021-11-14: +- Fixed: ksh crashed after unsetting .sh.match and then matching a pattern. + - Another test/[ fix: "test \( string1 -a string2 \)" and "test \( string1 -o string2 \)" no longer give an incorrect "argument expected" error message. diff --git a/src/cmd/ksh93/sh/init.c b/src/cmd/ksh93/sh/init.c index 5e263730c..bc89a2f44 100644 --- a/src/cmd/ksh93/sh/init.c +++ b/src/cmd/ksh93/sh/init.c @@ -783,6 +783,9 @@ void sh_setmatch(Shell_t *shp,const char *v, int vsize, int nmatch, regoff_t mat unsigned int savesub = shp->subshell; Namarr_t *ap = nv_arrayptr(SH_MATCHNOD); Namarr_t *ap_save = ap; + /* do not crash if .sh.match is unset */ + if(!ap) + return; shp->subshell = 0; #if !SHOPT_2DMATCH index = 0;