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.
This commit is contained in:
Florian Walch 2015-06-16 19:56:51 +03:00
parent fa13cc61ce
commit bfadf5a28b
2 changed files with 11 additions and 6 deletions

View File

@ -426,8 +426,12 @@ bool object_to_vim(Object obj, typval_T *tv, Error *err)
case kObjectTypeString: case kObjectTypeString:
tv->v_type = VAR_STRING; tv->v_type = VAR_STRING;
tv->vval.v_string = xmemdupz(obj.data.string.data, if (obj.data.string.data == NULL) {
obj.data.string.size); tv->vval.v_string = NULL;
} else {
tv->vval.v_string = xmemdupz(obj.data.string.data,
obj.data.string.size);
}
break; break;
case kObjectTypeArray: case kObjectTypeArray:

View File

@ -94,13 +94,14 @@ bool msgpack_rpc_to_string(msgpack_object *obj, String *arg)
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_NONNULL_ALL
{ {
if (obj->type == MSGPACK_OBJECT_BIN || obj->type == MSGPACK_OBJECT_STR) { 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 = xmemdupz(obj->via.bin.ptr, obj->via.bin.size);
arg->size = obj->via.bin.size; arg->size = obj->via.bin.size;
} else { return true;
return false;
} }
return false;
return true;
} }
bool msgpack_rpc_to_object(msgpack_object *obj, Object *arg) bool msgpack_rpc_to_object(msgpack_object *obj, Object *arg)