summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--object.c17
-rw-r--r--re.c23
-rw-r--r--sample/test.rb7
4 files changed, 47 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index ef78d0049e..f1bed984c3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -9,6 +9,16 @@ Sat May 17 00:18:11 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
returns EINVAL on some platforms, need to check true error
status. [ruby-core:01037]
+Sat May 17 00:21:51 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * object.c (rb_class_allocate_instance): singleton class check
+ moved to rb_obj_alloc(). (ruby-bugs-ja PR#345)
+
+Fri May 16 23:55:50 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * re.c (rb_reg_quote): should escape white space characters,
+ \t, \f, \n, \r. (ruby-bugs-ja PR#231)
+
Fri May 16 12:40:40 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
* eval.c (block_pass): chain previous block to the pushing block.
diff --git a/object.c b/object.c
index c9fc29d5bd..602634ea24 100644
--- a/object.c
+++ b/object.c
@@ -730,8 +730,12 @@ VALUE
rb_obj_alloc(klass)
VALUE klass;
{
- VALUE obj = rb_funcall(klass, ID_ALLOCATOR, 0, 0);
+ VALUE obj;
+ if (FL_TEST(klass, FL_SINGLETON)) {
+ rb_raise(rb_eTypeError, "can't create instance of virtual class");
+ }
+ obj = rb_funcall(klass, ID_ALLOCATOR, 0, 0);
if (rb_obj_class(obj) != rb_class_real(klass)) {
rb_raise(rb_eTypeError, "wrong instance allocation");
}
@@ -743,14 +747,9 @@ static VALUE
rb_class_allocate_instance(klass)
VALUE klass;
{
- if (FL_TEST(klass, FL_SINGLETON)) {
- rb_raise(rb_eTypeError, "can't create instance of virtual class");
- }
- else {
- NEWOBJ(obj, struct RObject);
- OBJSETUP(obj, klass, T_OBJECT);
- return (VALUE)obj;
- }
+ NEWOBJ(obj, struct RObject);
+ OBJSETUP(obj, klass, T_OBJECT);
+ return (VALUE)obj;
}
VALUE
diff --git a/re.c b/re.c
index 6d08fb81a1..29e2b94e09 100644
--- a/re.c
+++ b/re.c
@@ -1349,6 +1349,7 @@ rb_reg_quote(str)
case '*': case '.': case '\\':
case '?': case '+': case '^': case '$':
case ' ': case '#':
+ case '\t': case '\f': case '\n': case '\r':
goto meta_found;
}
}
@@ -1376,8 +1377,28 @@ rb_reg_quote(str)
case '(': case ')': case '|': case '-':
case '*': case '.': case '\\':
case '?': case '+': case '^': case '$':
- case ' ': case '#':
+ case '#':
+ *t++ = '\\';
+ break;
+ case ' ':
+ *t++ = '\\';
+ *t++ = 's';
+ break;
+ case '\t':
+ *t++ = '\\';
+ *t++ = 't';
+ break;
+ case '\n':
+ *t++ = '\\';
+ *t++ = 'n';
+ break;
+ case '\r':
+ *t++ = '\\';
+ *t++ = 'r';
+ break;
+ case '\f':
*t++ = '\\';
+ *t++ = 'f';
break;
}
*t++ = c;
diff --git a/sample/test.rb b/sample/test.rb
index 32b79a61f6..d49e7a3e28 100644
--- a/sample/test.rb
+++ b/sample/test.rb
@@ -1194,6 +1194,13 @@ test_ok(-1045307475.to_s(36) == "-hacker")
test_ok("Just_another_Ruby_hacker".to_i(36) == 265419172580680477752431643787347)
test_ok(-265419172580680477752431643787347.to_s(36) == "-justanotherrubyhacker")
+a = []
+(0..255).each {|n|
+ ch = [n].pack("C")
+ a.push ch if /a#{Regexp.quote ch}b/x =~ "ab"
+}
+test_ok(a.size == 0)
+
test_check "assignment"
a = nil
test_ok(defined?(a))