diff options
| author | dearblue <[email protected]> | 2019-01-17 23:12:21 +0900 |
|---|---|---|
| committer | dearblue <[email protected]> | 2019-01-20 14:23:22 +0900 |
| commit | d6d02774c55e294adfebf619ee4ce8298249bb0c (patch) | |
| tree | 4dca1a9e9a7ac701a77752e4d67fd1d3245ca0ad /include | |
| parent | b83e4df43dea43e5ded33a6efa3e3f679d444d8c (diff) | |
| download | mruby-d6d02774c55e294adfebf619ee4ce8298249bb0c.tar.gz mruby-d6d02774c55e294adfebf619ee4ce8298249bb0c.zip | |
Fix memory leak `sval` when out of memory in `Data_Wrap_Struct()`
Diffstat (limited to 'include')
| -rw-r--r-- | include/mruby/data.h | 5 |
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))) |
