summaryrefslogtreecommitdiffstats
path: root/src/jplist.c
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2022-01-28 22:11:00 +0100
committerGravatar Nikias Bassen2022-01-28 22:12:09 +0100
commit088cdab964e6cd88b7f15f36eb3e08d38189cd21 (patch)
treec34ccf3bbd7db715dabf76adccb8decda5f502a4 /src/jplist.c
parent6ef1c269792ece2842f65b4b6966ebac3b21a8e3 (diff)
downloadlibplist-088cdab964e6cd88b7f15f36eb3e08d38189cd21.tar.gz
libplist-088cdab964e6cd88b7f15f36eb3e08d38189cd21.tar.bz2
jplist: Fix NULL pointer dereference by handling errors from unescape_string correctly
Credit to OSS-Fuzz
Diffstat (limited to 'src/jplist.c')
-rw-r--r--src/jplist.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/jplist.c b/src/jplist.c
index ace4bff..c149d20 100644
--- a/src/jplist.c
+++ b/src/jplist.c
@@ -549,6 +549,9 @@ static plist_t parse_string(const char* js, jsmntok_t* tokens, int* index)
549 549
550 size_t str_len = 0; ; 550 size_t str_len = 0; ;
551 char* strval = unescape_string(js + tokens[*index].start, tokens[*index].end - tokens[*index].start, &str_len); 551 char* strval = unescape_string(js + tokens[*index].start, tokens[*index].end - tokens[*index].start, &str_len);
552 if (!strval) {
553 return NULL;
554 }
552 plist_t node; 555 plist_t node;
553 556
554 plist_data_t data = plist_new_plist_data(); 557 plist_data_t data = plist_new_plist_data();
@@ -612,6 +615,9 @@ static plist_t parse_object(const char* js, jsmntok_t* tokens, int* index)
612 for (num = 0; num < num_tokens; num++) { 615 for (num = 0; num < num_tokens; num++) {
613 if (tokens[j].type == JSMN_STRING) { 616 if (tokens[j].type == JSMN_STRING) {
614 char* key = unescape_string(js + tokens[j].start, tokens[j].end - tokens[j].start, NULL); 617 char* key = unescape_string(js + tokens[j].start, tokens[j].end - tokens[j].start, NULL);
618 if (!key) {
619 return NULL;
620 }
615 plist_t val = NULL; 621 plist_t val = NULL;
616 j++; 622 j++;
617 num++; 623 num++;