(linenum→info "unix/slp.c:2238")

glibc/2.7/posix/bug-regex13.c

    1: /* Regular expression tests.
    2:    Copyright (C) 2002 Free Software Foundation, Inc.
    3:    This file is part of the GNU C Library.
    4:    Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>, 2002.
    5: 
    6:    The GNU C Library is free software; you can redistribute it and/or
    7:    modify it under the terms of the GNU Lesser General Public
    8:    License as published by the Free Software Foundation; either
    9:    version 2.1 of the License, or (at your option) any later version.
   10: 
   11:    The GNU C Library is distributed in the hope that it will be useful,
   12:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   13:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   14:    Lesser General Public License for more details.
   15: 
   16:    You should have received a copy of the GNU Lesser General Public
   17:    License along with the GNU C Library; if not, write to the Free
   18:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   19:    02111-1307 USA.  */
   20: 
   21: #include <sys/types.h>
   22: #include <mcheck.h>
   23: #include <regex.h>
   24: #include <stdio.h>
   25: #include <stdlib.h>
   26: #include <string.h>
   27: 
   28: static struct
   29: {
   30:   int syntax;
   31:   const char *pattern;
   32:   const char *string;
   33:   int start;
   34: } tests[] = {
   35:   {RE_BACKSLASH_ESCAPE_IN_LISTS, "[0\\-9]", "1", -1}, /* It should not match.  */
   36:   {RE_BACKSLASH_ESCAPE_IN_LISTS, "[0\\-9]", "-", 0}, /* It should match.  */
   37:   {RE_SYNTAX_POSIX_BASIC, "s1\n.*\ns3", "s1\ns2\ns3", 0},
   38:   {RE_SYNTAX_POSIX_EXTENDED, "ab{0}c", "ac", 0},
   39:   {RE_SYNTAX_POSIX_EXTENDED, "ab{0}c", "abc", -1},
   40:   {RE_SYNTAX_POSIX_EXTENDED, "ab{0}c", "abbc", -1},
   41:   /* Nested duplication.  */
   42:   {RE_SYNTAX_POSIX_EXTENDED, "ab{1}{1}c", "ac", -1},
   43:   {RE_SYNTAX_POSIX_EXTENDED, "ab{1}{1}c", "abc", 0},
   44:   {RE_SYNTAX_POSIX_EXTENDED, "ab{1}{1}c", "abbc", -1},
   45:   {RE_SYNTAX_POSIX_EXTENDED, "ab{2}{2}c", "ac", -1},
   46:   {RE_SYNTAX_POSIX_EXTENDED, "ab{2}{2}c", "abbc", -1},
   47:   {RE_SYNTAX_POSIX_EXTENDED, "ab{2}{2}c", "abbbbc", 0},
   48:   {RE_SYNTAX_POSIX_EXTENDED, "ab{2}{2}c", "abbbbbc", -1},
   49:   {RE_SYNTAX_POSIX_EXTENDED, "ab{0}{1}c", "ac", 0},
   50:   {RE_SYNTAX_POSIX_EXTENDED, "ab{0}{1}c", "abc", -1},
   51:   {RE_SYNTAX_POSIX_EXTENDED, "ab{0}{1}c", "abbc", -1},
   52:   {RE_SYNTAX_POSIX_EXTENDED, "ab{1}{0}c", "ac", 0},
   53:   {RE_SYNTAX_POSIX_EXTENDED, "ab{1}{0}c", "abc", -1},
   54:   {RE_SYNTAX_POSIX_EXTENDED, "ab{1}{0}c", "abbc", -1},
   55:   {RE_SYNTAX_POSIX_EXTENDED, "ab{0}*c", "ac", 0},
   56:   {RE_SYNTAX_POSIX_EXTENDED, "ab{0}*c", "abc", -1},
   57:   {RE_SYNTAX_POSIX_EXTENDED, "ab{0}*c", "abbc", -1},
   58:   {RE_SYNTAX_POSIX_EXTENDED, "ab{0}?c", "ac", 0},
   59:   {RE_SYNTAX_POSIX_EXTENDED, "ab{0}?c", "abc", -1},
   60:   {RE_SYNTAX_POSIX_EXTENDED, "ab{0}?c", "abbc", -1},
   61:   {RE_SYNTAX_POSIX_EXTENDED, "ab{0}+c", "ac", 0},
   62:   {RE_SYNTAX_POSIX_EXTENDED, "ab{0}+c", "abc", -1},
   63:   {RE_SYNTAX_POSIX_EXTENDED, "ab{0}+c", "abbc", -1},
   64: };
   65: 
   66: int
   67: main (void)
   68: {
   69:   struct re_pattern_buffer regbuf;
   70:   const char *err;
   71:   size_t i;
   72:   int ret = 0;
   73: 
   74:   mtrace ();
   75: 
   76:   for (i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i)
   77:     {
   78:       int start;
   79:       re_set_syntax (tests[i].syntax);
   80:       memset (&regbuf, '\0', sizeof (regbuf));
   81:       err = re_compile_pattern (tests[i].pattern, strlen (tests[i].pattern),
   82:                                 &regbuf);
   83:       if (err != NULL)
   84:         {
   85:           printf ("re_compile_pattern failed: %s\n", err);
   86:           ret = 1;
   87:           continue;
   88:         }
   89: 
   90:       start = re_search (&regbuf, tests[i].string, strlen (tests[i].string),
   91:                          0, strlen (tests[i].string), NULL);
   92:       if (start != tests[i].start)
   93:         {
   94:           printf ("re_search failed %d\n", start);
   95:           ret = 1;
   96:           regfree (&regbuf);
   97:           continue;
   98:         }
   99:       regfree (&regbuf);
  100:     }
  101: 
  102:   return ret;
  103: }
Syntax (Markdown)