From b6f480c75ceed1620d462e33e73c192533d5be56 Mon Sep 17 00:00:00 2001 From: Steffen Nurpmeso Date: Fri, 7 Sep 2018 18:33:57 +0200 Subject: [PATCH] c_vexpr(): i?regex: fix false optional atom match assignments (Rich Felker) --- accmacvar.c | 19 ++++++++++++------- cc-test.sh | 12 +++++++++++- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/accmacvar.c b/accmacvar.c index 7452a5e2..3d4e2a2d 100644 --- a/accmacvar.c +++ b/accmacvar.c @@ -3854,20 +3854,25 @@ jesubstring_len: struct a_amv_lostack los; struct a_amv_mac_call_args amca; char const **reargv; + size_t cnt; memset(&amca, 0, sizeof amca); amca.amca_name = savestrbuf(&argv[1][rema[0].rm_so], rema[0].rm_eo - rema[0].rm_so); amca.amca_amp = a_AMV_MACKY_MACK; - for(i = 1; i < n_NELEM(rema) && rema[i].rm_so != -1; ++i) - ; - amca.amca_pospar.app_count = (ui32_t)i - 1; + for(cnt = i = 1; i < n_NELEM(rema); ++i) + if(rema[i].rm_so != -1) + cnt = i; + amca.amca_pospar.app_count = (ui32_t)cnt; amca.amca_pospar.app_not_heap = TRU1; amca.amca_pospar.app_dat = - reargv = n_autorec_alloc(sizeof(char*) * i); - for(i = 1; i < n_NELEM(rema) && rema[i].rm_so != -1; ++i) - *reargv++ = savestrbuf(&argv[1][rema[i].rm_so], - rema[i].rm_eo - rema[i].rm_so); + reargv = n_autorec_alloc(sizeof(char*) * (cnt +1)); + for(i = 1; i <= cnt; ++reargv, ++i) + if(rema[i].rm_so != -1) + *reargv = savestrbuf(&argv[1][rema[i].rm_so], + rema[i].rm_eo - rema[i].rm_so); + else + *reargv = n_empty; *reargv = NULL; memset(&los, 0, sizeof los); diff --git a/cc-test.sh b/cc-test.sh index 8001b693..fc49b7db 100755 --- a/cc-test.sh +++ b/cc-test.sh @@ -2362,9 +2362,19 @@ t_vexpr() { vput vexpr res iregex 'bananarama' '(.+)rama' '\$1\$0' echo $?/$^ERRNAME :$res: echo ' #4' + vput vexpr res regex 'banana' '(club )?(.*)(nana)(.*)' \ + '\$1\${2}\$4\${3}rama' + echo $?/$^ERRNAME :$res: + vput vexpr res regex 'Banana' '(club )?(.*)(nana)(.*)' \ + '\$1\$2\${2}\$2\$4\${3}rama' + echo $?/$^ERRNAME :$res: + vput vexpr res regex 'Club banana' '(club )?(.*)(nana)(.*)' \ + '\$1\${2}\$4\${3}rama' + echo $?/$^ERRNAME :$res: + echo ' #5' __EOT - check regex 0 "${MBOX}" '3270360157 311' + check regex 0 "${MBOX}" '3949279959 384' else printf 'vexpr-regex: unsupported, skipped\n' fi -- 2.11.4.GIT