diff options
author | Florian Walch <florian@fwalch.com> | 2015-06-16 19:56:51 +0300 |
---|---|---|
committer | Florian Walch <florian@fwalch.com> | 2015-06-30 18:36:41 +0300 |
commit | bfadf5a28b550bf99101c17244d5ea1b926e40c3 (patch) | |
tree | 87f69db54729fd317ac516dec0091a54f24f4267 | |
parent | fa13cc61ced0ea5ecbebee9d95adcde5540b9e54 (diff) | |
download | rneovim-bfadf5a28b550bf99101c17244d5ea1b926e40c3.tar.gz rneovim-bfadf5a28b550bf99101c17244d5ea1b926e40c3.tar.bz2 rneovim-bfadf5a28b550bf99101c17244d5ea1b926e40c3.zip |
ASan: Fix "null pointer passed for argument declared to never be null". #2925
Arguments passed to xmemdupz() are sometimes NULL, but xmemdupz() has
FUNC_ATTR_NONNULL_ALL. Check pointers for NULL before calling
xmemdupz().
Resolves #2533.
-rw-r--r-- | src/nvim/api/private/helpers.c | 8 | ||||
-rw-r--r-- | src/nvim/msgpack_rpc/helpers.c | 9 |
2 files changed, 11 insertions, 6 deletions
diff --git a/src/nvim/api/private/helpers.c b/src/nvim/api/private/helpers.c index 2a01f83688..0485fbacd2 100644 --- a/src/nvim/api/private/helpers.c +++ b/src/nvim/api/private/helpers.c @@ -426,8 +426,12 @@ bool object_to_vim(Object obj, typval_T *tv, Error *err) case kObjectTypeString: tv->v_type = VAR_STRING; - tv->vval.v_string = xmemdupz(obj.data.string.data, - obj.data.string.size); + if (obj.data.string.data == NULL) { + tv->vval.v_string = NULL; + } else { + tv->vval.v_string = xmemdupz(obj.data.string.data, + obj.data.string.size); + } break; case kObjectTypeArray: diff --git a/src/nvim/msgpack_rpc/helpers.c b/src/nvim/msgpack_rpc/helpers.c index acfd3fe94f..473958c765 100644 --- a/src/nvim/msgpack_rpc/helpers.c +++ b/src/nvim/msgpack_rpc/helpers.c @@ -94,13 +94,14 @@ 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->size = obj->via.bin.size; - } else { - return false; + return true; } - - return true; + return false; } bool msgpack_rpc_to_object(msgpack_object *obj, Object *arg) |