[#11952] NORETURN — "Nobuyoshi.Nakada" <nobu.nakada@...>

なかだです。

24 messages 2001/01/10
[#11956] Re: NORETURN — WATANABE Hirofumi <eban@...> 2001/01/10

わたなべです.

[#11957] Re: NORETURN — matz@... (Yukihiro Matsumoto) 2001/01/10

まつもと ゆきひろです

[#11958] Re: NORETURN — WATANABE Hirofumi <eban@...> 2001/01/10

わたなべです.

[#11959] CVS branches (Re: Re: NORETURN) — matz@... (Yukihiro Matsumoto) 2001/01/10

[#12087] string#index, gsub, []= のバグ? — Beyond <beyond@...>

18 messages 2001/01/27
[#12091] Re: string#index, gsub, []= のバグ? — matz@... (Yukihiro Matsumoto) 2001/01/27

まつもと ゆきひろです

[ruby-dev:12112] Re: string#index, gsub, []= のバグ?

From: Koji Arai <JCA02266@...>
Date: 2001-01-28 15:51:33 UTC
List: ruby-dev #12112
新井です。

> まつもと ゆきひろです

> パッチです。1.6に当ててください。

表面的な判断しかできませんが、orig=0にする条件が逆じゃありま
せんか?

--- string.c.org	Mon Jan 29 00:08:07 2001
+++ string.c	Mon Jan 29 00:33:20 2001
@@ -367,7 +367,6 @@
 	rb_raise(rb_eSecurityError, "Insecure: can't modify string");
     if (!RSTRING(str)->orig || FL_TEST(str, STR_NO_ORIG)) return 1;
     if (TYPE(RSTRING(str)->orig) != T_STRING) rb_bug("non string str->orig");
-    RSTRING(str)->orig = 0;
     return 0;
 }
 
@@ -384,6 +383,7 @@
     }
     ptr[RSTRING(str)->len] = 0;
     RSTRING(str)->ptr = ptr;
+    RSTRING(str)->orig = 0;
 }
 
 VALUE
@@ -1277,6 +1277,9 @@
     if (bang) {
 	if (str_independent(str)) {
 	    free(RSTRING(str)->ptr);
+	}
+	else {
+	    RSTRING(str)->orig = 0;
 	}
     }
     else {


んで、最後の部分は

    if (bang) {
	if (str_independent(str)) {
	    free(RSTRING(str)->ptr);
	}
    }
    else {
	NEWOBJ(dup, struct RString);
	OBJSETUP(dup, rb_cString, T_STRING);
	OBJ_INFECT(dup, str);
	str = (VALUE)dup;
    }
    RSTRING(str)->ptr = buf;
    RSTRING(str)->len = len = bp - buf;
    RSTRING(str)->ptr[len] = '\0';
    RSTRING(str)->orig = 0;

でも良いのかな?よくわからなかった。

「str_independent(str) が真なら RSTRING(str)->orig の中身は0
でよい」は成り立ちますか?

--
新井康司 (Koji Arai)

In This Thread