]> Savannah Git Hosting - gnulib.git/commitdiff
regex: Fix undefined behaviour.
authorBruno Haible <bruno@clisp.org>
Mon, 14 Apr 2025 14:00:13 +0000 (16:00 +0200)
committerBruno Haible <bruno@clisp.org>
Mon, 14 Apr 2025 22:50:15 +0000 (00:50 +0200)
* lib/regex.h (_REGEX_NELTS): Define to empty; don't use ISO C99
variable-length arrays.

ChangeLog
lib/regex.h

index 62c91fca9ec2aaf43088bd9888b1736ca2abdc58..5e49fce290ca2e9aa5114fe09a60ef77dc4ef788 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2025-04-14  Bruno Haible  <bruno@clisp.org>
+
+       regex: Fix undefined behaviour.
+       * lib/regex.h (_REGEX_NELTS): Define to empty; don't use ISO C99
+       variable-length arrays.
+
 2025-04-14  Bruno Haible  <bruno@clisp.org>
 
        select tests: Work around a Cygwin bug.
index 67a3aa70a518605ede0f4a3b91df73574466040c..164dbe11155da82dc5799656243defb670e695d5 100644 (file)
@@ -523,8 +523,12 @@ typedef struct
 /* Declarations for routines.  */
 
 #ifndef _REGEX_NELTS
-# if (defined __STDC_VERSION__ && 199901L <= __STDC_VERSION__ \
-       && !defined __STDC_NO_VLA__)
+/* The macro _REGEX_NELTS denotes the number of elements in a variable-length
+   array passed to a function.
+   It was meant to make use of ISO C99 variable-length arrays, but this does
+   not work: ISO C23 ยง 6.7.6.2.(5) requires the number of elements to be > 0,
+   but the NMATCH argument to regexec() is allowed to be 0.  */
+# if 0
 #  define _REGEX_NELTS(n) n
 # else
 #  define _REGEX_NELTS(n)