From: Bruno Haible Date: Mon, 14 Apr 2025 14:00:13 +0000 (+0200) Subject: regex: Fix undefined behaviour. X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=b7d79274c2ac3f2f9326c85056aead3ed648372e;p=gnulib.git regex: Fix undefined behaviour. * lib/regex.h (_REGEX_NELTS): Define to empty; don't use ISO C99 variable-length arrays. --- diff --git a/ChangeLog b/ChangeLog index 86efde745b..2003027edb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2025-04-14 Bruno Haible + + 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 select tests: Work around a Cygwin bug. diff --git a/lib/regex.h b/lib/regex.h index 71a45f8c27..dcc51652a8 100644 --- a/lib/regex.h +++ b/lib/regex.h @@ -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)