summaryrefslogtreecommitdiff
path: root/ext/syck
diff options
context:
space:
mode:
authorocean <ocean@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-12-16 02:45:35 +0000
committerocean <ocean@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-12-16 02:45:35 +0000
commit7680ca8d2612a6a5e452f616e271ef3c02bec3f6 (patch)
tree3e16fa966413ac05f9f75cd65bb45106dd1d8485 /ext/syck
parent2d6dad4f4f9cca79764289d6b1e61392dccc7e89 (diff)
* ext/syck/rubyext.c (syck_resolver_tagurize): fixed memory leak.
* ext/syck/rubyext.c (syck_node_type_id_set): should set newly allocated memory instead of RString's internal storage. ... these fixes won't fix [ruby-dev:27839]. more work is needed. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9697 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/syck')
-rw-r--r--ext/syck/rubyext.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/ext/syck/rubyext.c b/ext/syck/rubyext.c
index cf183dab52..e45d4971f2 100644
--- a/ext/syck/rubyext.c
+++ b/ext/syck/rubyext.c
@@ -1191,10 +1191,9 @@ syck_resolver_tagurize( self, val )
if ( !NIL_P(tmp) )
{
- char *taguri;
- val = tmp;
- taguri = syck_type_id_to_uri( RSTRING(val)->ptr );
- return rb_str_new2( taguri );
+ char *taguri = syck_type_id_to_uri( RSTRING(tmp)->ptr );
+ val = rb_str_new2( taguri );
+ S_FREE( taguri );
}
return val;
@@ -1405,7 +1404,9 @@ syck_node_mark( n )
}
break;
}
- rb_gc_mark_maybe( n->shortcut );
+#if 0 /* maybe needed */
+ if ( n->shortcut ) syck_node_mark( n->shortcut ); /* caution: maybe cyclic */
+#endif
}
/*
@@ -1795,7 +1796,8 @@ syck_node_type_id_set( self, type_id )
if ( NIL_P( type_id ) ) {
node->type_id = NULL;
} else {
- node->type_id = StringValuePtr( type_id );
+ StringValue( type_id );
+ node->type_id = syck_strndup( RSTRING(type_id)->ptr, RSTRING(type_id)->len );
}
rb_iv_set( self, "@type_id", type_id );