fix(api): some robustness issues in api_parse_enter

This commit is contained in:
bfredl
2022-06-03 11:51:31 +02:00
parent 9745941ef6
commit 7264444873

View File

@@ -50,15 +50,23 @@ static void api_parse_enter(mpack_parser_t *parser, mpack_node_t *node)
Object *obj = parent->data[0].p; Object *obj = parent->data[0].p;
KeyValuePair *kv = &kv_A(obj->data.dictionary, parent->pos); KeyValuePair *kv = &kv_A(obj->data.dictionary, parent->pos);
if (!parent->key_visited) { if (!parent->key_visited) {
// TODO(bfredl): when implementing interrupt parse on error,
// stop parsing here when node is not a STR/BIN
kv->key = (String)STRING_INIT;
key_location = &kv->key; key_location = &kv->key;
} else {
result = &kv->value;
} }
result = &kv->value;
break; break;
} }
default: case MPACK_TOKEN_STR:
case MPACK_TOKEN_BIN:
case MPACK_TOKEN_EXT:
assert(node->tok.type == MPACK_TOKEN_CHUNK);
break; break;
default:
abort();
} }
} else { } else {
result = &unpacker->result; result = &unpacker->result;
@@ -99,6 +107,7 @@ static void api_parse_enter(mpack_parser_t *parser, mpack_node_t *node)
break; break;
case MPACK_TOKEN_CHUNK: case MPACK_TOKEN_CHUNK:
assert(parent);
if (parent->tok.type == MPACK_TOKEN_STR || parent->tok.type == MPACK_TOKEN_BIN) { if (parent->tok.type == MPACK_TOKEN_STR || parent->tok.type == MPACK_TOKEN_BIN) {
char *data = parent->data[0].p; char *data = parent->data[0].p;
memcpy(data + parent->pos, memcpy(data + parent->pos,