summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2017-02-07 12:44:52 +0100
committerGravatar Nikias Bassen2017-02-07 12:44:52 +0100
commit56ba9bf7f625f6b72df982e7ef298b9791b1cf47 (patch)
tree4d53004b4c7788e3c78d91e6a41f43ca568f800d
parentfbd8494d5e4e46bf2e90cb6116903e404374fb56 (diff)
downloadlibplist-56ba9bf7f625f6b72df982e7ef298b9791b1cf47.tar.gz
libplist-56ba9bf7f625f6b72df982e7ef298b9791b1cf47.tar.bz2
bplist: Make sure to bail out if malloc() fails in parse_data_node()
Credit to OSS-Fuzz
-rw-r--r--src/bplist.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/bplist.c b/src/bplist.c
index 20e5090..c1f6007 100644
--- a/src/bplist.c
+++ b/src/bplist.c
@@ -394,6 +394,11 @@ static plist_t parse_data_node(const char **bnode, uint64_t size)
data->type = PLIST_DATA;
data->length = size;
data->buff = (uint8_t *) malloc(sizeof(uint8_t) * size);
+ if (!data->strval) {
+ plist_free_data(data);
+ PLIST_BIN_ERR("%s: Could not allocate %" PRIu64 " bytes\n", __func__, sizeof(uint8_t) * size);
+ return NULL;
+ }
memcpy(data->buff, *bnode, sizeof(uint8_t) * size);
return node_create(NULL, data);