summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--eval.c6
-rw-r--r--regex.c12
3 files changed, 21 insertions, 2 deletions
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 <matz@ruby-lang.org>
+
+ * 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 <nobu.nokada@softhome.net>
* 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;
}