mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-10-15 15:16:51 +02:00
When the original PR was applied, the resource leak had been fixed, but a dual free problem had been happened. When msgpack_unpacker_next returns MSGPACK_UNPACK_CONTINUE, msgpack_unpacked::zone is not replaced. Then mespack_zone_free is called twice with the same object. msgpack_unpacked_destroy frees msgpack::zone when it is not NULL and set it to NULL. Also, fixed memory leak (msgpack_sbuffer) on the test code.
This commit is contained in:
@@ -492,9 +492,7 @@ void msgpack_unpacker_reset(msgpack_unpacker* mpac)
|
|||||||
|
|
||||||
msgpack_unpack_return msgpack_unpacker_next(msgpack_unpacker* mpac, msgpack_unpacked* result)
|
msgpack_unpack_return msgpack_unpacker_next(msgpack_unpacker* mpac, msgpack_unpacked* result)
|
||||||
{
|
{
|
||||||
if(result->zone != NULL) {
|
msgpack_unpacked_destroy(result);
|
||||||
msgpack_zone_free(result->zone);
|
|
||||||
}
|
|
||||||
|
|
||||||
int ret = msgpack_unpacker_execute(mpac);
|
int ret = msgpack_unpacker_execute(mpac);
|
||||||
|
|
||||||
|
@@ -110,5 +110,5 @@ TEST(streaming, basic)
|
|||||||
|
|
||||||
msgpack_unpacker_destroy(&pac);
|
msgpack_unpacker_destroy(&pac);
|
||||||
msgpack_unpacked_destroy(&result);
|
msgpack_unpacked_destroy(&result);
|
||||||
|
msgpack_sbuffer_free(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user