diff --git a/cJSON.c b/cJSON.c index 453d755b0ef1c5fe918defeb19ddcfdf2abd7b60_Y0pTT04uYw==..720aa16524aeac24927d6599a2a8b57b32fc637a_Y0pTT04uYw== 100644 --- a/cJSON.c +++ b/cJSON.c @@ -1509,6 +1509,10 @@ success: input_buffer->depth--; + if (head != NULL) { + head->prev = current_item; + } + item->type = cJSON_Array; item->child = head; @@ -1681,6 +1685,10 @@ success: input_buffer->depth--; + if (head != NULL) { + head->prev = current_item; + } + item->type = cJSON_Object; item->child = head; @@ -2202,6 +2210,12 @@ /* first element */ parent->child = item->next; } + else if (item->next == NULL) + { + /* last element */ + parent->child->prev = item->prev; + } + /* make sure the detached item doesn't point anywhere anymore */ item->prev = NULL; item->next = NULL; @@ -2299,6 +2313,10 @@ } if (parent->child == item) { + if (parent->child->prev == parent->child) + { + replacement->prev = replacement; + } parent->child = replacement; } else @@ -2310,6 +2328,10 @@ { replacement->prev->next = replacement; } + if (replacement->next == NULL) + { + parent->child->prev = replacement; + } } item->next = NULL;