{{ message }}
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.

There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How about use
i = 0here and removePy_CLEARE(ctx->stack[0].obj)at the bottom?Is
map_keyat stack[0] safe?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I obviously have less knowledge about this than you so let me know if I'm wrong, but my understanding is that
unpack_initsetstopto 0 but still pushes something intostack[0]:msgpack-python/msgpack/unpack_template.h
Line 56 in 0d600a3
As a result, if we looped from
[0; top)andtop == 0then we wouldn't freestack[0].objas far as I can tell.Regarding
map_keyatstack[0]: I think we may need to free it depending on the case. Iftopis 0 then we never need to free it; iftop >= 1then we would need to check forCT_MAP_KEYlike we do in the loop.So bottomline: we can probably iterate from
0toctx->top > 0 ? ctx->top : 1to capture both cases. On top of that, we would need to check whetherctx->top == 0before theCT_MAP_KEYcheck (since as far as I can tell,ctx->stack[0].ctwould be uninitialised so if we're unlucky, we could accidentally callPy_CLEAR(ctx->stack[0].map_key)which would not be safe.But if we're adding all that logic, what may actually be simpler is a mix of all the things: