From: Shugo Maeda Date: 2003-03-04T14:52:09+09:00 Subject: [ruby-dev:19728] Re: bug in cgi.rb? --Multipart_Tue_Mar__4_14:52:08_2003-1 Content-Type: text/plain; charset=ISO-2022-JP 前田です。 At Tue, 4 Mar 2003 14:45:49 +0900, Shugo Maeda wrote: > > 一応追ってみると mod_ruby-table.c:table_add() -> apache-main/alloc.c: > > ap_table_addn() に至るまで全てポインタで持ちまわっているので、場合によっ > > てはヘッダ送信時に$1の内容が破壊されていることがあるような気がします。 > > えーと、mod_rubyのバグですね。すみません。 > > 原因はap_table_addn()の第一引数の方をコピーしてなかったせいで、GC > がおきた時に文字列が壊れていました。 > 他のap_table_xxxxn()を使っている部分も問題があるので、 > ap_table_add()などを使うように修正しようと思います。 たぶん、添付するパッチで直ると思いますので、確認いただけると助か ります。 -- 前田 修吾 --Multipart_Tue_Mar__4_14:52:08_2003-1 Content-Type: application/octet-stream; type=patch Content-Disposition: attachment; filename="table.c.diff" Content-Transfer-Encoding: 7bit Index: table.c =================================================================== RCS file: /src/mod_ruby/table.c,v retrieving revision 1.10 diff -u -r1.10 table.c --- table.c 7 May 2002 07:35:09 -0000 1.10 +++ table.c 4 Mar 2003 05:50:00 -0000 @@ -62,24 +62,20 @@ static VALUE table_set(VALUE self, VALUE name, VALUE val) { table *tbl; - char *s; Check_Type(val, T_STRING); Data_Get_Struct(self, table, tbl); - s = ap_pstrndup(ap_table_elts(tbl)->pool, RSTRING(val)->ptr, RSTRING(val)->len); - ap_table_setn(tbl, STR2CSTR(name), s); + ap_table_set(tbl, STR2CSTR(name), STR2CSTR(val)); return val; } static VALUE table_merge(VALUE self, VALUE name, VALUE val) { table *tbl; - char *s; Check_Type(val, T_STRING); Data_Get_Struct(self, table, tbl); - s = ap_pstrndup(ap_table_elts(tbl)->pool, RSTRING(val)->ptr, RSTRING(val)->len); - ap_table_mergen(tbl, STR2CSTR(name), s); + ap_table_merge(tbl, STR2CSTR(name), STR2CSTR(val)); return val; } @@ -95,11 +91,9 @@ static VALUE table_add(VALUE self, VALUE name, VALUE val) { table *tbl; - char *s; Check_Type(val, T_STRING); Data_Get_Struct(self, table, tbl); - s = ap_pstrndup(ap_table_elts(tbl)->pool, RSTRING(val)->ptr, RSTRING(val)->len); - ap_table_addn(tbl, STR2CSTR(name), s); + ap_table_add(tbl, STR2CSTR(name), STR2CSTR(val)); return val; } --Multipart_Tue_Mar__4_14:52:08_2003-1--