[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

r3227 - in glibc-package/branches/glibc-2.9/debian: . patches patches/any



Author: schizo
Date: 2009-01-09 17:40:36 +0000 (Fri, 09 Jan 2009)
New Revision: 3227

Added:
   glibc-package/branches/glibc-2.9/debian/patches/any/cvs-bz697-posix-regexec.diff
   glibc-package/branches/glibc-2.9/debian/patches/any/cvs-bz9697-posix-regcomp.diff
Modified:
   glibc-package/branches/glibc-2.9/debian/changelog
   glibc-package/branches/glibc-2.9/debian/patches/series
Log:
  * patches/any/cvs-bz697-posix-regexec.diff: regex fix from Paolo Bonzini.
  * patches/any/cvs-bz9697-posix-regcomp.diff: regex fix from Paolo Bonzini,
    closes: #510219.

Modified: glibc-package/branches/glibc-2.9/debian/changelog
===================================================================
--- glibc-package/branches/glibc-2.9/debian/changelog	2009-01-08 09:12:22 UTC (rev 3226)
+++ glibc-package/branches/glibc-2.9/debian/changelog	2009-01-09 17:40:36 UTC (rev 3227)
@@ -1,4 +1,4 @@
-glibc (2.9-0exp1) UNRELEASED; urgency=low
+glibc (2.9-0exp2) UNRELEASED; urgency=low
 
   [ Aurelien Jarno ]
   * New upstream release.
@@ -54,8 +54,13 @@
     on hppa.
   * debian/copyright: update.  Closes: bug#506881.
 
- -- Aurelien Jarno <aurel32@debian.org>  Wed, 07 Jan 2009 17:17:52 +0100
+  [ Clint Adams ]
+  * patches/any/cvs-bz697-posix-regexec.diff: regex fix from Paolo Bonzini.
+  * patches/any/cvs-bz9697-posix-regcomp.diff: regex fix from Paolo Bonzini,
+    closes: #510219.
 
+ -- Clint Adams <schizo@debian.org>  Fri, 09 Jan 2009 12:38:28 -0500
+
 glibc (2.8+20080809-3) experimental; urgency=low
 
   [ Aurelien Jarno ]

Added: glibc-package/branches/glibc-2.9/debian/patches/any/cvs-bz697-posix-regexec.diff
===================================================================
--- glibc-package/branches/glibc-2.9/debian/patches/any/cvs-bz697-posix-regexec.diff	                        (rev 0)
+++ glibc-package/branches/glibc-2.9/debian/patches/any/cvs-bz697-posix-regexec.diff	2009-01-09 17:40:36 UTC (rev 3227)
@@ -0,0 +1,50 @@
+diff --git a/ChangeLog b/ChangeLog
+index 8829b44..17e987b 100644
+--- a/ChangeLog
++++ b/ChangeLog
+@@ -1,3 +1,10 @@
++2009-01-05  Paolo Bonzini  <bonzini@gnu.org>
++
++	[BZ 697]
++	* posix/regexec.c (prune_impossible_nodes): Handle sifted_states[0]
++	being NULL also if there are no backreferences.
++	* posix/rxspencer/tests: Add testcases.
++
+ 2009-01-04  Paolo Bonzini  <bonzini@gnu.org>
+ 
+ 	[BZ 9697]
+diff --git a/posix/regexec.c b/posix/regexec.c
+index 135efe7..7bf0c08 100644
+--- a/posix/regexec.c
++++ b/posix/regexec.c
+@@ -1,5 +1,5 @@
+ /* Extended regular expression matching and search library.
+-   Copyright (C) 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
++   Copyright (C) 2002, 2003, 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
+ 
+@@ -1004,6 +1004,11 @@ prune_impossible_nodes (mctx)
+       re_node_set_free (&sctx.limits);
+       if (BE (ret != REG_NOERROR, 0))
+ 	goto free_return;
++      if (sifted_states[0] == NULL)
++	{
++	  ret = REG_NOMATCH;
++	  goto free_return;
++	}
+     }
+   re_free (mctx->state_log);
+   mctx->state_log = sifted_states;
+diff --git a/posix/rxspencer/tests b/posix/rxspencer/tests
+index b84a270..3ad46e2 100644
+--- a/posix/rxspencer/tests
++++ b/posix/rxspencer/tests
+@@ -536,3 +536,7 @@ a.*\b	&	abT	ab
+ \B	&	aSbTc
+ \B	&	SaT	@SaT
+ \B	&	aSTSb	@TSb
++
++o$($|.)	-	oN
++o$($|.)	-	op
++o$($|.)	-	o	o

Added: glibc-package/branches/glibc-2.9/debian/patches/any/cvs-bz9697-posix-regcomp.diff
===================================================================
--- glibc-package/branches/glibc-2.9/debian/patches/any/cvs-bz9697-posix-regcomp.diff	                        (rev 0)
+++ glibc-package/branches/glibc-2.9/debian/patches/any/cvs-bz9697-posix-regcomp.diff	2009-01-09 17:40:36 UTC (rev 3227)
@@ -0,0 +1,182 @@
+diff --git a/ChangeLog b/ChangeLog
+index 182bd26..8829b44 100644
+--- a/ChangeLog
++++ b/ChangeLog
+@@ -1,3 +1,10 @@
++2009-01-04  Paolo Bonzini  <bonzini@gnu.org>
++
++	[BZ 9697]
++	* posix/bug-regex17.c: Add testcases.
++	* posix/regcomp.c (re_compile_fastmap_iter): Rewrite COMPLEX_BRACKET
++	handling.
++
+ 2009-01-05  Martin Schwidefsky  <schwidefsky@de.ibm.com>
+ 
+ 	* sysdeps/unix/sysv/linux/s390/bits/libc-vdso.h: New file.
+diff --git a/posix/bug-regex17.c b/posix/bug-regex17.c
+index b42f9b6..1c11a1d 100644
+--- a/posix/bug-regex17.c
++++ b/posix/bug-regex17.c
+@@ -1,5 +1,5 @@
+-/* Turkish regular expression tests.
+-   Copyright (C) 2002, 2003 Free Software Foundation, Inc.
++/* German regular expression tests.
++   Copyright (C) 2002, 2003, 2009 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
+ 
+@@ -33,10 +33,10 @@ struct
+   int flags, nmatch;
+   regmatch_t rm[5];
+ } tests[] = {
+-  /* \xc3\x84	LATIN CAPITAL LETTER A WITH DIAERESIS
+-     \xc3\x96	LATIN CAPITAL LETTER O WITH DIAERESIS
+-     \xc3\xa4	LATIN SMALL LETTER A WITH DIAERESIS
+-     \xc3\xb6	LATIN SMALL LETTER O WITH DIAERESIS  */
++  /* U+00C4	\xc3\x84	LATIN CAPITAL LETTER A WITH DIAERESIS
++     U+00D6	\xc3\x96	LATIN CAPITAL LETTER O WITH DIAERESIS
++     U+00E4	\xc3\xa4	LATIN SMALL LETTER A WITH DIAERESIS
++     U+00F6	\xc3\xb6	LATIN SMALL LETTER O WITH DIAERESIS  */
+   { "\xc3\x84\xc3\x96*\xc3\xb6$", "aB\xc3\xa4\xc3\xb6\xc3\xb6\xc3\x96", REG_ICASE, 2,
+     { { 2, 10 }, { -1, -1 } } },
+   { "[\xc3\x84x]\xc3\x96*\xc3\xb6$", "aB\xc3\x84\xc3\xb6\xc3\xb6\xc3\x96", REG_ICASE, 2,
+@@ -45,10 +45,22 @@ struct
+     { { 2, 10 }, { -1, -1 } } },
+   { "[^x]\xc3\x96*\xc3\xb6$", "aB\xc3\xa4\xc3\xb6\xc3\xb6\xc3\x96", REG_ICASE, 2,
+     { { 2, 10 }, { -1, -1 } } },
++
++  /* Tests for bug 9697:
++     U+00DF	\xc3\x9f	LATIN SMALL LETTER SHARP S
++     U+02DA	\xcb\x9a	RING ABOVE
++     U+02E2	\xcb\xa2	MODIFIER LETTER SMALL S  */
++  { "[a-z]|[^a-z]", "\xcb\xa2", REG_EXTENDED, 2,
++    { { 0, 2 }, { -1, -1 } } },
++  { "[a-z]", "\xc3\x9f", REG_EXTENDED, 2,
++    { { 0, 2 }, { -1, -1 } } },
++  { "[^a-z]", "\xcb\x9a", REG_EXTENDED, 2,
++    { { 0, 2 }, { -1, -1 } } },
+ };
+ 
+-int
+-main (void)
++
++static int
++do_test (void)
+ {
+   regex_t re;
+   regmatch_t rm[5];
+@@ -93,3 +105,6 @@ main (void)
+ 
+   return ret;
+ }
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
+diff --git a/posix/regcomp.c b/posix/regcomp.c
+index d5a0535..4843cfe 100644
+--- a/posix/regcomp.c
++++ b/posix/regcomp.c
+@@ -1,5 +1,6 @@
+ /* Extended regular expression matching and search library.
+-   Copyright (C) 2002,2003,2004,2005,2006,2007 Free Software Foundation, Inc.
++   Copyright (C) 2002,2003,2004,2005,2006,2007,2009
++   Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>.
+ 
+@@ -350,47 +351,67 @@ re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t *init_state,
+ #ifdef RE_ENABLE_I18N
+       else if (type == COMPLEX_BRACKET)
+ 	{
+-	  int i;
+ 	  re_charset_t *cset = dfa->nodes[node].opr.mbcset;
+-	  if (cset->non_match || cset->ncoll_syms || cset->nequiv_classes
+-	      || cset->nranges || cset->nchar_classes)
+-	    {
++	  int i;
++
+ # ifdef _LIBC
+-	      if (_NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES) != 0)
++	  /* See if we have to try all bytes which start multiple collation
++	     elements.
++	     e.g. In da_DK, we want to catch 'a' since "aa" is a valid
++		  collation element, and don't catch 'b' since 'b' is
++		  the only collation element which starts from 'b' (and
++		  it is caught by SIMPLE_BRACKET).  */
++	      if (_NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES) != 0
++		  && (cset->ncoll_syms || cset->nranges))
+ 		{
+-		  /* In this case we want to catch the bytes which are
+-		     the first byte of any collation elements.
+-		     e.g. In da_DK, we want to catch 'a' since "aa"
+-			  is a valid collation element, and don't catch
+-			  'b' since 'b' is the only collation element
+-			  which starts from 'b'.  */
+ 		  const int32_t *table = (const int32_t *)
+ 		    _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
+ 		  for (i = 0; i < SBC_MAX; ++i)
+ 		    if (table[i] < 0)
+ 		      re_set_fastmap (fastmap, icase, i);
+ 		}
+-# else
+-	      if (dfa->mb_cur_max > 1)
+-		for (i = 0; i < SBC_MAX; ++i)
+-		  if (__btowc (i) == WEOF)
+-		    re_set_fastmap (fastmap, icase, i);
+-# endif /* not _LIBC */
+-	    }
+-	  for (i = 0; i < cset->nmbchars; ++i)
++# endif /* _LIBC */
++
++	  /* See if we have to start the match at all multibyte characters,
++	     i.e. where we would not find an invalid sequence.  This only
++	     applies to multibyte character sets; for single byte character
++	     sets, the SIMPLE_BRACKET again suffices.  */
++	  if (dfa->mb_cur_max > 1
++	      && (cset->nchar_classes || cset->non_match
++# ifdef _LIBC
++		  || cset->nequiv_classes
++# endif /* _LIBC */
++		 ))
+ 	    {
+-	      char buf[256];
+-	      mbstate_t state;
+-	      memset (&state, '\0', sizeof (state));
+-	      if (__wcrtomb (buf, cset->mbchars[i], &state) != (size_t) -1)
+-		re_set_fastmap (fastmap, icase, *(unsigned char *) buf);
+-	      if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1)
++	      unsigned char c = 0;
++	      do
+ 		{
+-		  if (__wcrtomb (buf, towlower (cset->mbchars[i]), &state)
+-		      != (size_t) -1)
+-		    re_set_fastmap (fastmap, 0, *(unsigned char *) buf);
++		  mbstate_t mbs;
++		  memset (&mbs, 0, sizeof (mbs));
++		  if (__mbrtowc (NULL, (char *) &c, 1, &mbs) == (size_t) -2)
++		    re_set_fastmap (fastmap, false, (int) c);
+ 		}
++	      while (++c != 0);
+ 	    }
++
++	  else
++	    {
++	      /* ... Else catch all bytes which can start the mbchars.  */
++	      for (i = 0; i < cset->nmbchars; ++i)
++		{
++		  char buf[256];
++		  mbstate_t state;
++		  memset (&state, '\0', sizeof (state));
++		  if (__wcrtomb (buf, cset->mbchars[i], &state) != (size_t) -1)
++		    re_set_fastmap (fastmap, icase, *(unsigned char *) buf);
++		  if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1)
++		    {
++		      if (__wcrtomb (buf, towlower (cset->mbchars[i]), &state)
++			  != (size_t) -1)
++			re_set_fastmap (fastmap, false, *(unsigned char *) buf);
++		    }
++ 		}
++ 	    }
+ 	}
+ #endif /* RE_ENABLE_I18N */
+       else if (type == OP_PERIOD

Modified: glibc-package/branches/glibc-2.9/debian/patches/series
===================================================================
--- glibc-package/branches/glibc-2.9/debian/patches/series	2009-01-08 09:12:22 UTC (rev 3226)
+++ glibc-package/branches/glibc-2.9/debian/patches/series	2009-01-09 17:40:36 UTC (rev 3227)
@@ -162,3 +162,5 @@
 any/local-disable-nscd-host-caching.diff
 #any/submitted-fileops-and-signals.diff		# has issues
 any/local-missing-linux_types.h.diff
+any/cvs-bz697-posix-regexec.diff
+any/cvs-bz9697-posix-regcomp.diff


Reply to: