Correct two stale comments in the jsonpull port

jsonpull.h said a json_number is 40 bytes; it is 32 (json_object is 24,
and the repr discriminator fits in the base class's tail padding, so the
8-byte union lands at offset 24).

plugin.cpp's parse_feature() said `j` is freed only just before returning
or as jp->root at end of stream, but there is a third json_free(j) at the
bottom of the loop, for a complete Feature whose geometry came out empty.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017KNxyHKasyWrWcvre2yK4r
This commit is contained in:
Claude
2026-08-12 18:16:37 +00:00
parent ff01e872ef
commit 7991653422
2 changed files with 6 additions and 4 deletions
+5 -3
View File
@@ -151,9 +151,11 @@ serial_feature parse_feature(json_pull_ptr &jp, int z, unsigned x, unsigned y, s
// intermediate (still incomplete) container nodes. We must NOT free
// these intermediates here: they belong to the larger feature hash
// still being assembled, and freeing them would splice them out of
// the parent and corrupt the in-progress tree. We only free `j`
// after we have successfully processed a complete Feature hash
// (just before returning), or `jp->root` when the stream ends.
// the parent and corrupt the in-progress tree. So the `continue`
// paths below all leave `j` alone; `j` is only freed once it is a
// complete Feature hash -- either just before returning it, or at
// the bottom of the loop if its geometry turned out to be empty --
// or as `jp->root` when the stream ends.
json_object *j = json_read(jp);
if (j == nullptr) {
if (jp->error != nullptr) {