cJSON

mirror of Dave's cJSON
git clone git://git.thc420.xyz/cJSON
Log | Files | Refs | README | LICENSE

commit 9ed906758e052bdd791702bd7a43c48f8d438849
parent 2f712c7456869d4edbdc13c993dcdb00e7b5ccb2
Author: Max Bruckner <max@maxbruckner.de>
Date:   Tue,  7 Feb 2017 19:07:18 +0100

fix null pointer dereferences found by coverity

Diffstat:
McJSON.c | 18+++++++++++-------
McJSON_Utils.c | 11+++++++++++
2 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/cJSON.c b/cJSON.c @@ -1789,14 +1789,18 @@ static cJSON *create_reference(const cJSON *item) } /* Add item to array/object. */ -void cJSON_AddItemToArray(cJSON *array, cJSON *item) +void cJSON_AddItemToArray(cJSON *array, cJSON *item) { - cJSON *c = array->child; - if (!item) + cJSON *child = NULL; + + if ((item == NULL) || (array == NULL)) { return; } - if (!c) + + child = array->child; + + if (child == NULL) { /* list is empty, start new one */ array->child = item; @@ -1804,11 +1808,11 @@ void cJSON_AddItemToArray(cJSON *array, cJSON *item) else { /* append to the end */ - while (c->next) + while (child->next) { - c = c->next; + child = child->next; } - suffix_object(c, item); + suffix_object(child, item); } } diff --git a/cJSON_Utils.c b/cJSON_Utils.c @@ -494,6 +494,12 @@ static int cJSONUtils_ApplyPatch(cJSON *object, cJSON *patch) int cJSONUtils_ApplyPatches(cJSON *object, cJSON *patches) { int err = 0; + + if (patches == NULL) + { + return 1; + } + if ((patches->type & 0xFF) != cJSON_Array) { /* malformed patches. */ @@ -544,6 +550,11 @@ void cJSONUtils_AddPatchToArray(cJSON *array, const char *op, const char *path, static void cJSONUtils_CompareToPatch(cJSON *patches, const unsigned char *path, cJSON *from, cJSON *to) { + if ((from == NULL) || (to == NULL)) + { + return; + } + if ((from->type & 0xFF) != (to->type & 0xFF)) { cJSONUtils_GeneratePatch(patches, (const unsigned char*)"replace", path, 0, to);