aboutsummaryrefslogtreecommitdiff
path: root/posix
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-01-16 19:20:36 +0000
committerUlrich Drepper <drepper@redhat.com>2003-01-16 19:20:36 +0000
commit7b7b9e70ea0d820c863c78fbf84fe52626a408d6 (patch)
treee790ee9854276c668b51c81e470d2aab2df0800c /posix
parent850dcfcafe6c1cc9e59763a882a25a2f0c2c4d68 (diff)
downloadglibc-7b7b9e70ea0d820c863c78fbf84fe52626a408d6.tar
glibc-7b7b9e70ea0d820c863c78fbf84fe52626a408d6.tar.gz
glibc-7b7b9e70ea0d820c863c78fbf84fe52626a408d6.tar.bz2
glibc-7b7b9e70ea0d820c863c78fbf84fe52626a408d6.zip
Update.
* posix/regcomp.c (parse_bracket_exp): If build_charclass fails, set *err to the returned error, not to REG_ESPACE unconditionally. (build_word_op): Likewise. * posix/Makefile (tests): Add bug-regex16. * posix/bug-regex16.c: New test. 2003-01-16 Jakub Jelinek <jakub@redhat.com>
Diffstat (limited to 'posix')
-rw-r--r--posix/Makefile2
-rw-r--r--posix/bug-regex16.c35
-rw-r--r--posix/regcomp.c12
3 files changed, 42 insertions, 7 deletions
diff --git a/posix/Makefile b/posix/Makefile
index 90129d7685..6b2830ad8d 100644
--- a/posix/Makefile
+++ b/posix/Makefile
@@ -75,7 +75,7 @@ tests := tstgetopt testfnm runtests runptests \
tst-chmod bug-regex1 bug-regex2 bug-regex3 bug-regex4 \
tst-gnuglob tst-regex bug-regex5 bug-regex6 bug-regex7 \
bug-regex8 bug-regex9 bug-regex10 bug-regex11 bug-regex12 \
- bug-regex13 bug-regex14 bug-regex15
+ bug-regex13 bug-regex14 bug-regex15 bug-regex16
ifeq (yes,$(build-shared))
test-srcs := globtest
tests += wordexp-test tst-exec tst-spawn
diff --git a/posix/bug-regex16.c b/posix/bug-regex16.c
new file mode 100644
index 0000000000..1e41ccb718
--- /dev/null
+++ b/posix/bug-regex16.c
@@ -0,0 +1,35 @@
+/* Test re_compile_pattern error messages. */
+
+#include <stdio.h>
+#include <string.h>
+#include <regex.h>
+
+int
+main (void)
+{
+ struct re_pattern_buffer re;
+ const char *s;
+ int ret = 0;
+
+ re_set_syntax (RE_SYNTAX_POSIX_EGREP);
+ memset (&re, 0, sizeof (re));
+ s = re_compile_pattern ("[[.invalid_collating_symbol.]]", 30, &re);
+ if (s == NULL || strcmp (s, "Invalid collation character"))
+ {
+ printf ("re_compile_pattern returned %s\n", s);
+ ret = 1;
+ }
+ s = re_compile_pattern ("[[=invalid_equivalence_class=]]", 31, &re);
+ if (s == NULL || strcmp (s, "Invalid collation character"))
+ {
+ printf ("re_compile_pattern returned %s\n", s);
+ ret = 1;
+ }
+ s = re_compile_pattern ("[[:invalid_character_class:]]", 29, &re);
+ if (s == NULL || strcmp (s, "Invalid character class name"))
+ {
+ printf ("re_compile_pattern returned %s\n", s);
+ ret = 1;
+ }
+ return ret;
+}
diff --git a/posix/regcomp.c b/posix/regcomp.c
index 12724e4605..e36383b92d 100644
--- a/posix/regcomp.c
+++ b/posix/regcomp.c
@@ -2993,13 +2993,13 @@ parse_bracket_exp (regexp, dfa, token, syntax, err)
goto parse_bracket_exp_free_return;
break;
case CHAR_CLASS:
- ret = build_charclass (sbcset,
+ *err = build_charclass (sbcset,
#ifdef RE_ENABLE_I18N
- mbcset, &char_class_alloc,
+ mbcset, &char_class_alloc,
#endif /* RE_ENABLE_I18N */
- start_elem.opr.name, syntax);
- if (BE (ret != REG_NOERROR, 0))
- goto parse_bracket_exp_espace;
+ start_elem.opr.name, syntax);
+ if (BE (*err != REG_NOERROR, 0))
+ goto parse_bracket_exp_free_return;
break;
default:
assert (0);
@@ -3380,7 +3380,7 @@ build_word_op (dfa, not, err)
#ifdef RE_ENABLE_I18N
free_charset (mbcset);
#endif /* RE_ENABLE_I18N */
- *err = REG_ESPACE;
+ *err = ret;
return NULL;
}
/* \w match '_' also. */