lib: json: Fix off-by-one error when encoding objects

append_bytes_to_buf() already writes a NUL byte; no need to call
append_bytes() again with "" and size 1.

Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
This commit is contained in:
Leandro Pereira 2017-09-05 16:24:47 -07:00 committed by Anas Nashif
parent 637087cc56
commit d66069d051

View file

@ -797,10 +797,6 @@ static int bool_encode(const bool *value, json_append_bytes_t append_bytes,
return append_bytes("false", 5, data); return append_bytes("false", 5, data);
} }
static int obj_encode(const struct json_obj_descr *descr, size_t descr_len,
const void *val, json_append_bytes_t append_bytes,
void *data);
static int encode(const struct json_obj_descr *descr, const void *val, static int encode(const struct json_obj_descr *descr, const void *val,
json_append_bytes_t append_bytes, void *data) json_append_bytes_t append_bytes, void *data)
{ {
@ -816,8 +812,9 @@ static int encode(const struct json_obj_descr *descr, const void *val,
return arr_encode(descr->element_descr, ptr, return arr_encode(descr->element_descr, ptr,
val, append_bytes, data); val, append_bytes, data);
case JSON_TOK_OBJECT_START: case JSON_TOK_OBJECT_START:
return obj_encode(descr->sub_descr, descr->sub_descr_len, return json_obj_encode(descr->sub_descr,
ptr, append_bytes, data); descr->sub_descr_len,
ptr, append_bytes, data);
case JSON_TOK_NUMBER: case JSON_TOK_NUMBER:
return num_encode(ptr, append_bytes, data); return num_encode(ptr, append_bytes, data);
default: default:
@ -825,9 +822,9 @@ static int encode(const struct json_obj_descr *descr, const void *val,
} }
} }
static int obj_encode(const struct json_obj_descr *descr, size_t descr_len, int json_obj_encode(const struct json_obj_descr *descr, size_t descr_len,
const void *val, json_append_bytes_t append_bytes, const void *val, json_append_bytes_t append_bytes,
void *data) void *data)
{ {
size_t i; size_t i;
int ret; int ret;
@ -865,20 +862,6 @@ static int obj_encode(const struct json_obj_descr *descr, size_t descr_len,
return append_bytes("}", 1, data); return append_bytes("}", 1, data);
} }
int json_obj_encode(const struct json_obj_descr *descr, size_t descr_len,
const void *val, json_append_bytes_t append_bytes,
void *data)
{
int ret;
ret = obj_encode(descr, descr_len, val, append_bytes, data);
if (ret < 0) {
return ret;
}
return append_bytes("", 1, data);
}
struct appender { struct appender {
char *buffer; char *buffer;
size_t used; size_t used;