helpers.c: Handle msgpack str/bin objects with length 0 correctly

When converting a msgpack object to a String object, strings (and byte
arrays) with length 0 are handled as errors. This is fixed by
always using the msgpack data pointer as a valid pointer. For a NULL
pointer there is nothing to copy.

Test by @snoe

Fixes #3844
This commit is contained in:
oni-link
2015-12-19 11:29:39 +01:00
parent e123675bcc
commit 8373aaf44e
2 changed files with 23 additions and 4 deletions

View File

@@ -94,10 +94,9 @@ bool msgpack_rpc_to_string(msgpack_object *obj, String *arg)
FUNC_ATTR_NONNULL_ALL
{
if (obj->type == MSGPACK_OBJECT_BIN || obj->type == MSGPACK_OBJECT_STR) {
if (obj->via.bin.ptr == NULL) {
return false;
}
arg->data = xmemdupz(obj->via.bin.ptr, obj->via.bin.size);
arg->data = obj->via.bin.ptr != NULL
? xmemdupz(obj->via.bin.ptr, obj->via.bin.size)
: NULL;
arg->size = obj->via.bin.size;
return true;
}