Fix memory leak in code generated by `j2s` code.

Closes #17.
This commit is contained in:
Jordan Bancino 2023-11-20 09:51:08 -05:00
parent bc67393036
commit 29070c8f41
2 changed files with 8 additions and 2 deletions

View File

@ -12,6 +12,8 @@ releases. Final change log entries are published as [Releases](releases).
- Added an option to `j2s` to allow additional fields in structures and ignore them in - Added an option to `j2s` to allow additional fields in structures and ignore them in
encoding and decoding. Note that additional fields are totally untouched—they encoding and decoding. Note that additional fields are totally untouched—they
are not even initialized to a default value. are not even initialized to a default value.
- Fixed a memory leak that would occur in code generated by `j2s` under
specific circumstances.
- Added `JsonMerge()` to the JSON API to merge two JSON objects together. - Added `JsonMerge()` to the JSON API to merge two JSON objects together.
## v0.4.0 ## v0.4.0

View File

@ -660,11 +660,15 @@ Main(Array * args)
StreamPrintf(implFile, " }\n\n"); StreamPrintf(implFile, " }\n\n");
if (StrEquals(fieldType, "array")) if (StrEquals(fieldType, "array"))
{ {
StreamPrintf(implFile, " out->%s = JsonValueAsArray(JsonValueDuplicate(val));\n", key); StreamPrintf(implFile, " val = JsonValueDuplicate(val);\n");
StreamPrintf(implFile, " out->%s = JsonValueAsArray(val);\n", key);
StreamPrintf(implFile, " Free(val); /* Not JsonValueFree() because we want the inner value. */\n");
} }
else if (StrEquals(fieldType, "object")) else if (StrEquals(fieldType, "object"))
{ {
StreamPrintf(implFile, " out->%s = JsonValueAsObject(JsonValueDuplicate(val));\n", key); StreamPrintf(implFile, " val = JsonValueDuplicate(val);\n");
StreamPrintf(implFile, " out->%s = JsonValueAsObject(val);\n", key);
StreamPrintf(implFile, " Free(val); /* Not JsonValueFree() because we want the inner value. */\n");
} }
else if (*fieldType == '[' && fieldType[strlen(fieldType) - 1] == ']') else if (*fieldType == '[' && fieldType[strlen(fieldType) - 1] == ']')
{ {