Fix parsing/printing errors on empty maps & arrays
This commit is contained in:
parent
08bb217747
commit
6ffaa66158
1 changed files with 26 additions and 6 deletions
20
src/empack.c
20
src/empack.c
|
|
@ -130,6 +130,11 @@ empack_parse(empack_t *empack, const void *msgpack, uint32_t len)
|
|||
{
|
||||
empack_array_t *parr = &cur->val.array;
|
||||
|
||||
if (parr->object_count == 0) {
|
||||
/* nothing to do on an empty array */
|
||||
break;
|
||||
}
|
||||
|
||||
parr->objects = empack_allocate(empack, sizeof(empack_obj_t) * parr->object_count);
|
||||
if (parr->objects == NULL) {
|
||||
ret = EMPACK_STATUS_NOMEM;
|
||||
|
|
@ -147,6 +152,11 @@ empack_parse(empack_t *empack, const void *msgpack, uint32_t len)
|
|||
{
|
||||
empack_map_t *pmap = &cur->val.map;
|
||||
|
||||
if (pmap->pair_count == 0) {
|
||||
/* nothing to do on an empty map */
|
||||
break;
|
||||
}
|
||||
|
||||
pmap->pairs = empack_allocate(empack, sizeof(empack_map_t) * pmap->pair_count);
|
||||
if (pmap->pairs == NULL) {
|
||||
ret = EMPACK_STATUS_NOMEM;
|
||||
|
|
@ -523,18 +533,28 @@ empack_print(empack_t *empack,
|
|||
case EMPACK_TYPE_MAP16:
|
||||
case EMPACK_TYPE_MAP32:
|
||||
EMPACK_PRINT("{", 1);
|
||||
|
||||
if (cur->val.map.pair_count > 0) {
|
||||
EMPACK_PRINT_NEWLINE();
|
||||
cur->val.map.pairs_parsed = 0;
|
||||
indent_depth++;
|
||||
} else {
|
||||
EMPACK_PRINT("}", 1);
|
||||
}
|
||||
break;
|
||||
|
||||
case EMPACK_TYPE_FIXARRAY:
|
||||
case EMPACK_TYPE_ARRAY16:
|
||||
case EMPACK_TYPE_ARRAY32:
|
||||
EMPACK_PRINT("[", 1);
|
||||
|
||||
if (cur->val.array.object_count > 0) {
|
||||
EMPACK_PRINT_NEWLINE();
|
||||
cur->val.array.objects_parsed = 0;
|
||||
indent_depth++;
|
||||
} else {
|
||||
EMPACK_PRINT("]", 1);
|
||||
}
|
||||
break;
|
||||
|
||||
case EMPACK_TYPE_FIXSTR:
|
||||
|
|
|
|||
Loading…
Reference in a new issue