diff options
Diffstat (limited to 'posix')
-rw-r--r-- | posix/Makefile | 3 | ||||
-rw-r--r-- | posix/bug-regex4.c | 6 | ||||
-rw-r--r-- | posix/bug-regex6.c | 12 | ||||
-rw-r--r-- | posix/bug-regex7.c | 92 | ||||
-rw-r--r-- | posix/bug-regex8.c | 84 |
5 files changed, 188 insertions, 9 deletions
diff --git a/posix/Makefile b/posix/Makefile index db58cf5c7c..e9a46c2cf4 100644 --- a/posix/Makefile +++ b/posix/Makefile @@ -71,7 +71,8 @@ tests := tstgetopt testfnm runtests runptests \ tst-getlogin tst-mmap tst-getaddrinfo tst-truncate \ tst-truncate64 tst-fork tst-fnmatch tst-regexloc tst-dir \ tst-chmod bug-regex1 bug-regex2 bug-regex3 bug-regex4 \ - tst-gnuglob tst-regex bug-regex5 bug-regex6 + tst-gnuglob tst-regex bug-regex5 bug-regex6 bug-regex7 \ + bug-regex8 ifeq (yes,$(build-shared)) test-srcs := globtest tests += wordexp-test tst-exec tst-spawn diff --git a/posix/bug-regex4.c b/posix/bug-regex4.c index 5ecca1a8d0..317a678c0c 100644 --- a/posix/bug-regex4.c +++ b/posix/bug-regex4.c @@ -1,5 +1,5 @@ /* Test for re_search_2. - Copyright (C) 2001 Free Software Foundation, Inc. + Copyright (C) 2001, 2002 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com>, 2001. @@ -38,7 +38,7 @@ main (void) s = re_compile_pattern ("ab[cde]", 7, ®ex); if (s != NULL) { - puts ("re_compile_pattern return non-NULL value"); + puts ("re_compile_pattern returned non-NULL value"); result = 1; } else @@ -48,7 +48,7 @@ main (void) match[2] = re_search_2 (®ex, "xya", 3, "bd", 2, 2, 6, NULL, 8); if (match[0] != 2 || match[1] != 0 || match[2] != 2) { - printf ("re_match returned %d,%d,%d, expected 2,0,2\n", + printf ("re_search_2 returned %d,%d,%d, expected 2,0,2\n", match[0], match[1], match[2]); result = 1; } diff --git a/posix/bug-regex6.c b/posix/bug-regex6.c index 9a06898a26..9c3f3750d2 100644 --- a/posix/bug-regex6.c +++ b/posix/bug-regex6.c @@ -18,10 +18,12 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#include <sys/types.h> -#include <regex.h> #include <locale.h> #include <stdio.h> +#include <string.h> +#include <sys/types.h> +#include <regex.h> + int main (int argc, char *argv[]) @@ -29,8 +31,8 @@ main (int argc, char *argv[]) regex_t re; regmatch_t mat[10]; int i, j, ret = 0; - char *locales[] = { "C", "de_DE.UTF-8" }; - char *string = "http://www.regex.com/pattern/matching.html#intro"; + const char *locales[] = { "C", "de_DE.UTF-8" }; + const char *string = "http://www.regex.com/pattern/matching.html#intro"; regmatch_t expect[10] = { { 0, 48 }, { 0, 5 }, { 0, 4 }, { 5, 20 }, { 7, 20 }, { 20, 42 }, { -1, -1 }, { -1, -1 }, { 42, 48 }, { 43, 48 } }; @@ -46,7 +48,7 @@ main (int argc, char *argv[]) "^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?", REG_EXTENDED) != REG_NOERROR) { - puts ("cannot compile expression \"[a-f]*\""); + puts ("cannot compile the regular expression"); ret = 1; } else if (regexec (&re, string, 10, mat, 0) == REG_NOMATCH) diff --git a/posix/bug-regex7.c b/posix/bug-regex7.c new file mode 100644 index 0000000000..44594597da --- /dev/null +++ b/posix/bug-regex7.c @@ -0,0 +1,92 @@ +/* Test for regs allocation in re_search and re_match. + Copyright (C) 2002 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Stepan Kasal <kasal@math.cas.cz>, 2002. + + 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, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <locale.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/types.h> +#include <regex.h> + + +int +main (void) +{ + struct re_pattern_buffer regex; + struct re_registers regs; + const char *s; + int match, n; + int result = 0; + + memset (®ex, '\0', sizeof (regex)); + regs.start = regs.end = NULL; + regs.num_regs = 0; + s = re_compile_pattern ("a", 1, ®ex); + if (s != NULL) + { + puts ("failed to compile pattern \"a\""); + result = 1; + } + else + { + match = re_search (®ex, "baobab", 6, 0, 6, ®s); + n = 1; + if (match != 1) + { + printf ("re_search returned %d, expected 1\n", match); + result = 1; + } + else if (regs.num_regs <= n || regs.start[n] != -1 || regs.end[n] != -1) + { + puts ("re_search failed to fill the -1 sentinel"); + result = 1; + } + } + + free (regex.buffer); + memset (®ex, '\0', sizeof (regex)); + + s = re_compile_pattern ("\\(\\(\\(a\\)\\)\\)", 13, ®ex); + if (s != NULL) + { + puts ("failed to compile pattern /\\(\\(\\(a\\)\\)\\)/"); + result = 1; + } + else + { + match = re_match (®ex, "apl", 3, 0, ®s); + n = 4; + if (match != 1) + { + printf ("re_match returned %d, expected 1\n", match); + result = 1; + } + else if (regs.num_regs <= n || regs.start[n] != -1 || regs.end[n] != -1) + { + puts ("re_match failed to fill the -1 sentinel"); + result = 1; + } + } + + if (result == 0) + puts (" -> OK"); + + return result; +} diff --git a/posix/bug-regex8.c b/posix/bug-regex8.c new file mode 100644 index 0000000000..8383e01501 --- /dev/null +++ b/posix/bug-regex8.c @@ -0,0 +1,84 @@ +/* Test for the STOP parameter of re_match_2 and re_search_2. + Copyright (C) 2002 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Stepan Kasal <kasal@math.cas.cz>, 2002. + + 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, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <locale.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <sys/types.h> +#include <regex.h> + + +int +main (void) +{ + struct re_pattern_buffer regex; + const char *s; + int match[4]; + + memset (®ex, '\0', sizeof (regex)); + + s = re_compile_pattern ("xy$", 3, ®ex); + if (s != NULL) + { + puts ("failed to compile pattern \"xy$\""); + return 1; + } + else + match[0] = re_match_2(®ex,"xyz",3,NULL,0,0,NULL,2); + + free (regex.buffer); + memset (®ex, '\0', sizeof (regex)); + + s = re_compile_pattern ("xy\\>", 4, ®ex); + if (s != NULL) + { + puts ("failed to compile pattern \"xy\\>\""); + return 1; + } + else + match[1] = re_search_2(®ex,"xyz",3,NULL,0,0,2,NULL,2); + + free (regex.buffer); + memset (®ex, '\0', sizeof (regex)); + + s = re_compile_pattern ("xy \\<", 5, ®ex); + if (s != NULL) + { + puts ("failed to compile pattern \"xy \\<\""); + return 1; + } + else + { + match[2] = re_match_2(®ex,"xy ",4,NULL,0,0,NULL,3); + match[3] = re_match_2(®ex,"xy z",4,NULL,0,0,NULL,3); + } + + if (match[0] != -1 || match[1] != -1 || match[2] != -1 || match[3] != 3) + { + printf ("re_{match,search}_2 returned %d,%d,%d,%d, expected -1,-1,-1,3\n", + match[0], match[1], match[2], match[3]); + return 1; + } + + puts (" -> OK"); + + return 0; +} |