diff --git a/ChangeLog b/ChangeLog index dedd118073..4f94160667 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Fri Mar 21 23:23:45 2003 Yukihiro Matsumoto + + * regex.c (re_compile_pattern): give warning for unescaped square + brackets and minus in character class. [ruby-dev:19868] + Fri Mar 21 18:12:20 2003 Nobuyoshi Nakada * eval.c (bmcall): missing type. diff --git a/eval.c b/eval.c index 7fa1261af1..9c5dcb8659 100644 --- a/eval.c +++ b/eval.c @@ -7284,8 +7284,10 @@ static VALUE bmcall(args, method) VALUE args, method; { - volatile VALUE args2 = svalue_to_avalue(args); - return method_call(RARRAY(args2)->len, RARRAY(args2)->ptr, method); + volatile VALUE a; + + a = svalue_to_avalue(args); + return method_call(RARRAY(a)->len, RARRAY(a)->ptr, method); } static VALUE diff --git a/regex.c b/regex.c index 9ea73dac4c..7ae16cf121 100644 --- a/regex.c +++ b/regex.c @@ -185,6 +185,11 @@ static int current_mbctype = MBCTYPE_ASCII; #ifdef RUBY #include "util.h" +# re_warning(x) rb_warn(x) +#endif + +#ifndef re_warning +# define re_warning(x) #endif static void @@ -1464,6 +1469,7 @@ re_compile_pattern(pattern, size, bufp) if (p == p0 + 1) { if (p == pend) FREE_AND_RETURN(stackb, "invalid regular expression; empty character class"); + re_warning("character class has `]' without escape"); } else /* Stop if this isn't merely a ] inside a bracket @@ -1481,6 +1487,9 @@ re_compile_pattern(pattern, size, bufp) } had_char_class = 0; + if (c == '-') + re_warning("character class has `-' without escape"); + /* \ escapes characters when inside [...]. */ if (c == '\\') { PATFETCH_RAW(c); @@ -1678,6 +1687,7 @@ re_compile_pattern(pattern, size, bufp) c1++; while (c1--) PATUNFETCH; + re_warning("character class has `[' without escape"); SET_LIST_BIT(TRANSLATE_P()?translate['[']:'['); SET_LIST_BIT(TRANSLATE_P()?translate[':']:':'); had_char_class = 0; @@ -1685,6 +1695,8 @@ re_compile_pattern(pattern, size, bufp) } } else if (had_mbchar == 0 && (!current_mbctype || !had_num_literal)) { + if (c == '[') + re_warning("character class has `[' without escape"); SET_LIST_BIT(c); had_num_literal = 0; }