diff options
author | ocean <ocean@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-12-19 02:42:33 +0000 |
---|---|---|
committer | ocean <ocean@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-12-19 02:42:33 +0000 |
commit | af5edce080363018934906720203b125aeb53e85 (patch) | |
tree | e75e97b01282d1d7d4f638540689bbf7c2c1ad8a | |
parent | 8ed2a927e87a5a70a3a93c43e3ee0994a9eb98ff (diff) | |
download | ruby-af5edce080363018934906720203b125aeb53e85.tar.gz |
* ext/syck/rubyext.c: sorry, I reverted my "should set newly
allocated memory instead of RString's internal storage" stuff.
node allocated in rubyext.c seems to be freed by rb_syck_free_node
not syck_free_node, and it won't free data.str->ptr and type_id.
(I still think this is unsafe because RString(foo)->ptr becomes
dangling pointer when RString is modified or freed, but anyway
I misunderstood, so go back to original code for now)
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9708 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | ext/syck/rubyext.c | 7 |
2 files changed, 13 insertions, 5 deletions
@@ -1,3 +1,14 @@ +Mon Dec 19 11:37:47 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp> + + * ext/syck/rubyext.c: sorry, I reverted my "should set newly + allocated memory instead of RString's internal storage" stuff. + node allocated in rubyext.c seems to be freed by rb_syck_free_node + not syck_free_node, and it won't free data.str->ptr and type_id. + + (I still think this is unsafe because RString(foo)->ptr becomes + dangling pointer when RString is modified or freed, but anyway + I misunderstood, so go back to original code for now) + Sat Dec 17 21:50:41 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp> * ext/syck/rubyext.c (syck_emitter_reset): should initialize diff --git a/ext/syck/rubyext.c b/ext/syck/rubyext.c index c2e71b8b91..289801e49a 100644 --- a/ext/syck/rubyext.c +++ b/ext/syck/rubyext.c @@ -1536,7 +1536,7 @@ syck_scalar_value_set( self, val ) Data_Get_Struct( self, SyckNode, node ); StringValue( val ); - node->data.str->ptr = syck_strndup( RSTRING(val)->ptr, RSTRING(val)->len ); + node->data.str->ptr = RSTRING(val)->ptr; node->data.str->len = RSTRING(val)->len; node->data.str->style = scalar_none; @@ -1805,13 +1805,10 @@ syck_node_type_id_set( self, type_id ) SyckNode *node; Data_Get_Struct( self, SyckNode, node ); - if ( node->type_id != NULL ) S_FREE( node->type_id ); - if ( NIL_P( type_id ) ) { node->type_id = NULL; } else { - StringValue( type_id ); - node->type_id = syck_strndup( RSTRING(type_id)->ptr, RSTRING(type_id)->len ); + node->type_id = StringValuePtr( type_id ); } rb_iv_set( self, "@type_id", type_id ); |