summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'sys-apps/gawk/files/gawk-5.3.0-str2wstr.patch')
-rw-r--r--sys-apps/gawk/files/gawk-5.3.0-str2wstr.patch193
1 files changed, 193 insertions, 0 deletions
diff --git a/sys-apps/gawk/files/gawk-5.3.0-str2wstr.patch b/sys-apps/gawk/files/gawk-5.3.0-str2wstr.patch
new file mode 100644
index 000000000000..078ba8b1c746
--- /dev/null
+++ b/sys-apps/gawk/files/gawk-5.3.0-str2wstr.patch
@@ -0,0 +1,193 @@
+https://bugs.gentoo.org/921503
+https://lists.gnu.org/archive/html/bug-gawk/2024-01/msg00013.html
+https://git.savannah.gnu.org/cgit/gawk.git/commit/?h=gawk-5.3-stable&id=e05040b5d81b5a0e809fc56df2a7c3d654c77e1d
+
+From e05040b5d81b5a0e809fc56df2a7c3d654c77e1d Mon Sep 17 00:00:00 2001
+From: "Arnold D. Robbins" <arnold@skeeve.com>
+Date: Sun, 28 Jan 2024 20:24:09 +0200
+Subject: Bug fix in str2wstr.
+
+---
+ node.c | 26 ++++++++++++++------------
+ pc/Makefile.tst | 6 ++++++
+ test/Makefile.am | 5 ++++-
+ test/Makefile.in | 10 +++++++++-
+ test/Maketests | 5 +++++
+ test/match4.awk | 1 +
+ test/match4.ok | 1 +
+ 10 files changed, 56 insertions(+), 14 deletions(-)
+ create mode 100644 test/match4.awk
+ create mode 100644 test/match4.ok
+
+diff --git a/node.c b/node.c
+index de12f05..5aac5e8 100644
+--- a/node.c
++++ b/node.c
+@@ -816,6 +816,20 @@ str2wstr(NODE *n, size_t **ptr)
+ assert((n->flags & (STRING|STRCUR)) != 0);
+
+ /*
++ * For use by do_match, create and fill in an array.
++ * For each byte `i' in n->stptr (the original string),
++ * a[i] is equal to `j', where `j' is the corresponding wchar_t
++ * in the converted wide string.
++ *
++ * This is needed even for Nnull_string or Null_field.
++ *
++ * Create the array.
++ */
++ if (ptr != NULL) {
++ ezalloc(*ptr, size_t *, sizeof(size_t) * (n->stlen + 1), "str2wstr");
++ }
++
++ /*
+ * Don't convert global null string or global null field
+ * variables to a wide string. They are both zero-length anyway.
+ * This also avoids future double-free errors while releasing
+@@ -848,18 +862,6 @@ str2wstr(NODE *n, size_t **ptr)
+ emalloc(n->wstptr, wchar_t *, sizeof(wchar_t) * (n->stlen + 1), "str2wstr");
+ wsp = n->wstptr;
+
+- /*
+- * For use by do_match, create and fill in an array.
+- * For each byte `i' in n->stptr (the original string),
+- * a[i] is equal to `j', where `j' is the corresponding wchar_t
+- * in the converted wide string.
+- *
+- * Create the array.
+- */
+- if (ptr != NULL) {
+- ezalloc(*ptr, size_t *, sizeof(size_t) * (n->stlen + 1), "str2wstr");
+- }
+-
+ sp = n->stptr;
+ src_count = n->stlen;
+ memset(& mbs, 0, sizeof(mbs));
+diff --git a/pc/Makefile.tst b/pc/Makefile.tst
+index daf3c56..9ab61c7 100644
+--- a/pc/Makefile.tst
++++ b/pc/Makefile.tst
+@@ -180,6 +180,7 @@ BASIC_TESTS = \
+ substr swaplns synerr1 synerr2 synerr3 tailrecurse tradanch \
+ trailbs tweakfld uninit2 uninit3 uninit4 uninit5 uninitialized \
+ unterm uparrfs uplus wideidx wideidx2 widesub widesub2 widesub3 \
++ match4 \
+ widesub4 wjposer1 zero2 zeroe0 zeroflag
+
+ UNIX_TESTS = \
+@@ -2602,6 +2603,11 @@ widesub3:
+ AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
++match4:
++ @echo $@
++ @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
++ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
++
+ widesub4:
+ @echo $@ $(ZOS_FAIL)
+ @-[ -z "$$GAWKLOCALE" ] && GAWKLOCALE=ENU_USA.1252; export GAWKLOCALE; \
+diff --git a/test/Makefile.am b/test/Makefile.am
+index a876b3a..e1e1f3f 100644
+--- a/test/Makefile.am
++++ b/test/Makefile.am
+@@ -1,7 +1,7 @@
+ #
+ # test/Makefile.am --- automake input file for gawk
+ #
+-# Copyright (C) 1988-2023 the Free Software Foundation, Inc.
++# Copyright (C) 1988-2024 the Free Software Foundation, Inc.
+ #
+ # This file is part of GAWK, the GNU implementation of the
+ # AWK Programming Language.
+@@ -763,6 +763,8 @@ EXTRA_DIST = \
+ match3.awk \
+ match3.in \
+ match3.ok \
++ match4.awk \
++ match4.ok \
+ math.awk \
+ math.ok \
+ mbfw1.awk \
+@@ -1544,6 +1546,7 @@ BASIC_TESTS = \
+ substr swaplns synerr1 synerr2 synerr3 tailrecurse tradanch \
+ trailbs tweakfld uninit2 uninit3 uninit4 uninit5 uninitialized \
+ unterm uparrfs uplus wideidx wideidx2 widesub widesub2 widesub3 \
++ match4 \
+ widesub4 wjposer1 zero2 zeroe0 zeroflag
+
+ UNIX_TESTS = \
+diff --git a/test/Makefile.in b/test/Makefile.in
+index 1ef143f..681a85b 100644
+--- a/test/Makefile.in
++++ b/test/Makefile.in
+@@ -17,7 +17,7 @@
+ #
+ # test/Makefile.am --- automake input file for gawk
+ #
+-# Copyright (C) 1988-2023 the Free Software Foundation, Inc.
++# Copyright (C) 1988-2024 the Free Software Foundation, Inc.
+ #
+ # This file is part of GAWK, the GNU implementation of the
+ # AWK Programming Language.
+@@ -1027,6 +1027,8 @@ EXTRA_DIST = \
+ match3.awk \
+ match3.in \
+ match3.ok \
++ match4.awk \
++ match4.ok \
+ math.awk \
+ math.ok \
+ mbfw1.awk \
+@@ -1808,6 +1810,7 @@ BASIC_TESTS = \
+ substr swaplns synerr1 synerr2 synerr3 tailrecurse tradanch \
+ trailbs tweakfld uninit2 uninit3 uninit4 uninit5 uninitialized \
+ unterm uparrfs uplus wideidx wideidx2 widesub widesub2 widesub3 \
++ match4 \
+ widesub4 wjposer1 zero2 zeroe0 zeroflag
+
+ UNIX_TESTS = \
+@@ -4414,6 +4417,11 @@ widesub3:
+ AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
++match4:
++ @echo $@
++ @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
++ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
++
+ widesub4:
+ @echo $@ $(ZOS_FAIL)
+ @-[ -z "$$GAWKLOCALE" ] && GAWKLOCALE=en_US.UTF-8; export GAWKLOCALE; \
+diff --git a/test/Maketests b/test/Maketests
+index bac220f..9a00140 100644
+--- a/test/Maketests
++++ b/test/Maketests
+@@ -1288,6 +1288,11 @@ widesub3:
+ AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
+ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
+
++match4:
++ @echo $@
++ @-AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@
++ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@
++
+ widesub4:
+ @echo $@ $(ZOS_FAIL)
+ @-[ -z "$$GAWKLOCALE" ] && GAWKLOCALE=en_US.UTF-8; export GAWKLOCALE; \
+diff --git a/test/match4.awk b/test/match4.awk
+new file mode 100644
+index 0000000..e50150a
+--- /dev/null
++++ b/test/match4.awk
+@@ -0,0 +1 @@
++BEGIN { print match (m, /a?/) }
+diff --git a/test/match4.ok b/test/match4.ok
+new file mode 100644
+index 0000000..d00491f
+--- /dev/null
++++ b/test/match4.ok
+@@ -0,0 +1 @@
++1
+--
+cgit v1.1