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

Bug#175529: re_compile_pattern bug



Thanks for looking into that and for the fix!
Tim Waugh suggested the same thing a few days ago:

Index: m4/regex.m4
===================================================================
RCS file: /fetish/cu/m4/regex.m4,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -p -u -r1.26 -r1.27
--- m4/regex.m4	12 Aug 2001 13:26:00 -0000	1.26
+++ m4/regex.m4	16 Jan 2003 17:33:52 -0000	1.27
@@ -1,4 +1,4 @@
-#serial 12
+#serial 13
 
 dnl Initially derived from code in GNU grep.
 dnl Mostly written by Jim Meyering.
@@ -22,6 +22,7 @@ AC_DEFUN([jm_INCLUDED_REGEX],
 		   jm_cv_func_working_re_compile_pattern,
       AC_TRY_RUN(
 [#include <stdio.h>
+#include <string.h>
 #include <regex.h>
 	  int
 	  main ()
@@ -30,12 +31,14 @@ AC_DEFUN([jm_INCLUDED_REGEX],
 	    const char *s;
 	    struct re_registers regs;
 	    re_set_syntax (RE_SYNTAX_POSIX_EGREP);
+	    memset (&regex, 0, sizeof (regex));
 	    [s = re_compile_pattern ("a[[:@:>@:]]b\n", 9, &regex);]
 	    /* This should fail with _Invalid character class name_ error.  */
 	    if (!s)
 	      exit (1);
 
 	    /* This should succeed, but doesn't for e.g. glibc-2.1.3.  */
+	    memset (&regex, 0, sizeof (regex));
 	    s = re_compile_pattern ("{1", 2, &regex);
 
 	    if (s)
@@ -43,6 +46,7 @@ AC_DEFUN([jm_INCLUDED_REGEX],
 
 	    /* The following example is derived from a problem report
                against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>.  */
+	    memset (&regex, 0, sizeof (regex));
 	    s = re_compile_pattern ("[[anù]]*n", 7, &regex);
 	    if (s)
 	      exit (1);

FYI, GNU libc's regex code has just been changed so that it leaves
the affected members in a sane state, so the above initializations
would no longer be necessary.

2003-01-16  Jakub Jelinek  <jakub@redhat.com>

        * posix/regcomp.c (re_compile_internal): If clearing buffer, clear
        allocated too.  Reported by Al Viro <aviro@redhat.com>.



Reply to: