[ruby-dev:24372] Re: String#chomp! causes core dump

From: nobu@...
Date: 2004-09-29 23:01:59 UTC
List: ruby-dev #24372
なかだです。

At Thu, 30 Sep 2004 00:00:25 +0900,
Tanaka Akira wrote in [ruby-dev:24371]:
> 
> 次のようにすると core を吐きます。
> 
> % ./ruby -e '
> rs = Object.new
> s = "abcd" * 100
> class << rs; self end.send(:define_method, :to_str) {
>   s.replace ""
>   "abcd"
> }
> s.chomp!(rs)
> p s.length
> p s + "zzzz"
> '

うーん、StringValue()全部調べるのは大変だなぁ。


Index: string.c
===================================================================
RCS file: /cvs/ruby/src/ruby/string.c,v
retrieving revision 1.199
diff -U2 -p -d -r1.199 string.c
--- string.c	24 Sep 2004 05:53:41 -0000	1.199
+++ string.c	29 Sep 2004 22:58:57 -0000
@@ -3845,7 +3845,8 @@ rb_str_chomp_bang(argc, argv, str)
     int newline;
     char *p = RSTRING(str)->ptr;
-    long len = RSTRING(str)->len, rslen;
+    long len, rslen;
 
     if (rb_scan_args(argc, argv, "01", &rs) == 0) {
+	len = RSTRING(str)->len;
 	if (len == 0) return Qnil;
 	rs = rb_rs;
@@ -3872,8 +3873,9 @@ rb_str_chomp_bang(argc, argv, str)
     }
     if (NIL_P(rs)) return Qnil;
-    if (len == 0) return Qnil;
 
     StringValue(rs);
     rslen = RSTRING(rs)->len;
+    len = RSTRING(str)->len;
+    if (len == 0) return Qnil;
     if (rslen == 0) {
 	while (len>0 && p[len-1] == '\n') {


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread