summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2019-01-26 22:33:23 +0900
committerGitHub <[email protected]>2019-01-26 22:33:23 +0900
commita03e7214089d5c119ec157a6bdfe268b2e0dbf6d (patch)
tree33c588ae4c99e648265347f9a2fe45a68b5b25e5
parent2f62178ddacfe360c04c7715fd4cfaacddefff6b (diff)
parentd6d02774c55e294adfebf619ee4ce8298249bb0c (diff)
downloadmruby-a03e7214089d5c119ec157a6bdfe268b2e0dbf6d.tar.gz
mruby-a03e7214089d5c119ec157a6bdfe268b2e0dbf6d.zip
Merge pull request #4237 from dearblue/fix-memleak-Data_Wrap_Struct
Fix memory leak `sval` when out of memory in `Data_Wrap_Struct()`
-rw-r--r--include/mruby/data.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/include/mruby/data.h b/include/mruby/data.h
index 31d6bd8fb..415684342 100644
--- a/include/mruby/data.h
+++ b/include/mruby/data.h
@@ -39,10 +39,11 @@ MRB_API struct RData *mrb_data_object_alloc(mrb_state *mrb, struct RClass* klass
#define Data_Wrap_Struct(mrb,klass,type,ptr)\
mrb_data_object_alloc(mrb,klass,ptr,type)
-#define Data_Make_Struct(mrb,klass,strct,type,sval,data) do { \
+#define Data_Make_Struct(mrb,klass,strct,type,sval,data_obj) do { \
+ (data_obj) = Data_Wrap_Struct(mrb,klass,type,NULL);\
(sval) = mrb_malloc(mrb, sizeof(strct)); \
{ static const strct zero = { 0 }; *(sval) = zero; };\
- (data) = Data_Wrap_Struct(mrb,klass,type,sval);\
+ (data_obj)->data = (sval);\
} while (0)
#define RDATA(obj) ((struct RData *)(mrb_ptr(obj)))