summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-05-29 05:44:01 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-05-29 05:44:01 +0000
commit5924f9a684ace630d3658a0d6e52270e3686ca9f (patch)
treeebb5a982234e827223776db8b157f6b5f9b8277f /ext
parent238394e7384d68627b1faa9a45c95517e9ea47e3 (diff)
psych: allocate structs with wrapper
* ext/psych/psych_emitter.c (allocate): allocate structs with making new wrapper objects and get rid of potential memory leak. * ext/psych/psych_parser.c (allocate): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50672 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r--ext/psych/psych_emitter.c5
-rw-r--r--ext/psych/psych_parser.c4
2 files changed, 4 insertions, 5 deletions
diff --git a/ext/psych/psych_emitter.c b/ext/psych/psych_emitter.c
index 4ba238102b6..feffc54ce7a 100644
--- a/ext/psych/psych_emitter.c
+++ b/ext/psych/psych_emitter.c
@@ -50,14 +50,13 @@ static const rb_data_type_t psych_emitter_type = {
static VALUE allocate(VALUE klass)
{
yaml_emitter_t * emitter;
-
- emitter = xmalloc(sizeof(yaml_emitter_t));
+ VALUE obj = TypedData_Make_Struct(klass, yaml_emitter_t, &psych_emitter_type, emitter);
yaml_emitter_initialize(emitter);
yaml_emitter_set_unicode(emitter, 1);
yaml_emitter_set_indent(emitter, 2);
- return TypedData_Wrap_Struct(klass, &psych_emitter_type, emitter);
+ return obj;
}
/* call-seq: Psych::Emitter.new(io, options = Psych::Emitter::OPTIONS)
diff --git a/ext/psych/psych_parser.c b/ext/psych/psych_parser.c
index faae460dd01..2caa8a09c32 100644
--- a/ext/psych/psych_parser.c
+++ b/ext/psych/psych_parser.c
@@ -70,11 +70,11 @@ static const rb_data_type_t psych_parser_type = {
static VALUE allocate(VALUE klass)
{
yaml_parser_t * parser;
+ VALUE obj = TypedData_Make_Struct(klass, yaml_parser_t, &psych_parser_type, parser);
- parser = xmalloc(sizeof(yaml_parser_t));
yaml_parser_initialize(parser);
- return TypedData_Wrap_Struct(klass, &psych_parser_type, parser);
+ return obj;
}
static VALUE make_exception(yaml_parser_t * parser, VALUE path)