Fix memory leak with oneofs and PB_ENABLE_MALLOC #361
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This change backports/adapts the behavior from nanopb commit
4fe23595732b6f1254cfc11a9b8d6da900b55b0c. It fixes a memory leak in the decode path when usingoneoffields together withPB_ENABLE_MALLOC.Problem
When:
PB_ENABLE_MALLOCis enabled,oneoffield,oneofcontains a static submessage with pointer fields,the previous logic in
pb_release_union_field()did not free the old submessage correctly, anddecode_static_field()thenmemsets the uninitialized memory regardless of whether it should be reset or not, leading to a leak.Fix
Adjust the logic so that
memset()is only performed when thewhich_fieldtag is different. This ensures previously allocated memory is released correctly and no leak occurs.Impact
Reference
4fe23595732b6f1254cfc11a9b8d6da900b55b0c