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;
|
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);
|
parr->objects = empack_allocate(empack, sizeof(empack_obj_t) * parr->object_count);
|
||||||
if (parr->objects == NULL) {
|
if (parr->objects == NULL) {
|
||||||
ret = EMPACK_STATUS_NOMEM;
|
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;
|
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);
|
pmap->pairs = empack_allocate(empack, sizeof(empack_map_t) * pmap->pair_count);
|
||||||
if (pmap->pairs == NULL) {
|
if (pmap->pairs == NULL) {
|
||||||
ret = EMPACK_STATUS_NOMEM;
|
ret = EMPACK_STATUS_NOMEM;
|
||||||
|
|
@ -523,18 +533,28 @@ empack_print(empack_t *empack,
|
||||||
case EMPACK_TYPE_MAP16:
|
case EMPACK_TYPE_MAP16:
|
||||||
case EMPACK_TYPE_MAP32:
|
case EMPACK_TYPE_MAP32:
|
||||||
EMPACK_PRINT("{", 1);
|
EMPACK_PRINT("{", 1);
|
||||||
|
|
||||||
|
if (cur->val.map.pair_count > 0) {
|
||||||
EMPACK_PRINT_NEWLINE();
|
EMPACK_PRINT_NEWLINE();
|
||||||
cur->val.map.pairs_parsed = 0;
|
cur->val.map.pairs_parsed = 0;
|
||||||
indent_depth++;
|
indent_depth++;
|
||||||
|
} else {
|
||||||
|
EMPACK_PRINT("}", 1);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EMPACK_TYPE_FIXARRAY:
|
case EMPACK_TYPE_FIXARRAY:
|
||||||
case EMPACK_TYPE_ARRAY16:
|
case EMPACK_TYPE_ARRAY16:
|
||||||
case EMPACK_TYPE_ARRAY32:
|
case EMPACK_TYPE_ARRAY32:
|
||||||
EMPACK_PRINT("[", 1);
|
EMPACK_PRINT("[", 1);
|
||||||
|
|
||||||
|
if (cur->val.array.object_count > 0) {
|
||||||
EMPACK_PRINT_NEWLINE();
|
EMPACK_PRINT_NEWLINE();
|
||||||
cur->val.array.objects_parsed = 0;
|
cur->val.array.objects_parsed = 0;
|
||||||
indent_depth++;
|
indent_depth++;
|
||||||
|
} else {
|
||||||
|
EMPACK_PRINT("]", 1);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EMPACK_TYPE_FIXSTR:
|
case EMPACK_TYPE_FIXSTR:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue