]> 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 23:09:21 +0000 (01:09 +0200)
* lib/regex.h (_REGEX_NELTS): Define to empty; don't use ISO C99
variable-length arrays.

ChangeLog
lib/regex.h

index 86efde745b29f3a1ac9a31b839ebf0c391ab03cd..2003027edbf7534e24071d287635d2076167a899 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 71a45f8c27f3a347db2bfa53e01b266aba407acd..dcc51652a84e374a0a3fb85574908e73ba3eaf8e 100644 (file)
@@ -1,6 +1,6 @@
 /* Definitions for data structures and routines for the regular
    expression library.
-   Copyright (C) 1985, 1989-2024 Free Software Foundation, Inc.
+   Copyright (C) 1985, 1989-2025 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -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)