mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-21 01:12:26 +08:00
eb04c21373
This patch syncs the regex implementation with gnulib (commit 0ee5212). Only two changes in GLIBC regex testing are required: 1. posix/bug-regex28.c: as previously discussed [1] the change of expected results on the pattern should be safe. 2. posix/PCRE.tests: the ERE (a)|\1 is malformed (in the sense that the \1 doesn't mean anything) and although current GLIBC accepts it has undefined behavior. This patch removes the specific test. This sync contains some patches from thread 'Regex: Make libc regex more usable outside GLIBC.' [2] which have been pushed upstream in gnulib. This patches also fixes some regex issues (BZ #23233, BZ #21163, BZ #18986, BZ #13762) and I did not add testcases for both #23233 and #13762 because I couldn't think a simple way to trigger the expected failure path to trigger them. Checked on x86_64-linux-gnu and i686-linux-gnu. [BZ #23233] [BZ #21163] [BZ #18986] [BZ #13762] * posix/Makefile (tests): Add bug-regex37 and bug-regex38. * posix/PCRE.tests: Remove invalid test. * posix/bug-regex28.c: Fix expected values for used syntax. * posix/bug-regex37.c: New file. * posix/bug-regex38.c: Likewise. * posix/regcomp.c: Sync with gnulib. * posix/regex.c: Likewise. * posix/regex.h: Likewise. * posix/regex_internal.c: Likewise. * posix/regex_internal.h: Likewise. * posix/regexec.c: Likewise. [1] https://sourceware.org/ml/libc-alpha/2017-12/msg00807.html [2] https://sourceware.org/ml/libc-alpha/2017-12/msg00237.html
82 lines
3.1 KiB
C
82 lines
3.1 KiB
C
/* Extended regular expression matching and search library.
|
|
Copyright (C) 2002-2018 Free Software Foundation, Inc.
|
|
This file is part of the GNU C Library.
|
|
Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
|
|
|
|
The GNU C Library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Lesser General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2.1 of the License, or (at your option) any later version.
|
|
|
|
The GNU C Library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with the GNU C Library; if not, see
|
|
<https://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef _LIBC
|
|
# include <config.h>
|
|
|
|
# if (__GNUC__ == 4 && 6 <= __GNUC_MINOR__) || 4 < __GNUC__
|
|
# pragma GCC diagnostic ignored "-Wsuggest-attribute=pure"
|
|
# endif
|
|
# if (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) || 4 < __GNUC__
|
|
# pragma GCC diagnostic ignored "-Wold-style-definition"
|
|
# pragma GCC diagnostic ignored "-Wtype-limits"
|
|
# endif
|
|
#endif
|
|
|
|
/* Make sure no one compiles this code with a C++ compiler. */
|
|
#if defined __cplusplus && defined _LIBC
|
|
# error "This is C code, use a C compiler"
|
|
#endif
|
|
|
|
#ifdef _LIBC
|
|
/* We have to keep the namespace clean. */
|
|
# define regfree(preg) __regfree (preg)
|
|
# define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef)
|
|
# define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags)
|
|
# define regerror(errcode, preg, errbuf, errbuf_size) \
|
|
__regerror(errcode, preg, errbuf, errbuf_size)
|
|
# define re_set_registers(bu, re, nu, st, en) \
|
|
__re_set_registers (bu, re, nu, st, en)
|
|
# define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \
|
|
__re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
|
|
# define re_match(bufp, string, size, pos, regs) \
|
|
__re_match (bufp, string, size, pos, regs)
|
|
# define re_search(bufp, string, size, startpos, range, regs) \
|
|
__re_search (bufp, string, size, startpos, range, regs)
|
|
# define re_compile_pattern(pattern, length, bufp) \
|
|
__re_compile_pattern (pattern, length, bufp)
|
|
# define re_set_syntax(syntax) __re_set_syntax (syntax)
|
|
# define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \
|
|
__re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop)
|
|
# define re_compile_fastmap(bufp) __re_compile_fastmap (bufp)
|
|
|
|
# include "../locale/localeinfo.h"
|
|
#endif
|
|
|
|
/* On some systems, limits.h sets RE_DUP_MAX to a lower value than
|
|
GNU regex allows. Include it before <regex.h>, which correctly
|
|
#undefs RE_DUP_MAX and sets it to the right value. */
|
|
#include <limits.h>
|
|
|
|
#include <regex.h>
|
|
#include "regex_internal.h"
|
|
|
|
#include "regex_internal.c"
|
|
#include "regcomp.c"
|
|
#include "regexec.c"
|
|
|
|
/* Binary backward compatibility. */
|
|
#if _LIBC
|
|
# include <shlib-compat.h>
|
|
# if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3)
|
|
link_warning (re_max_failures, "the 're_max_failures' variable is obsolete and will go away.")
|
|
int re_max_failures = 2000;
|
|
# endif
|
|
#endif
|