summaryrefslogtreecommitdiffstats
path: root/src/plist.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plist.c')
-rw-r--r--src/plist.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/plist.c b/src/plist.c
index 05af457..5ea6c12 100644
--- a/src/plist.c
+++ b/src/plist.c
@@ -898,7 +898,10 @@ static plist_t plist_copy_node(node_t root)
switch (f->type) {
case PLIST_ARRAY:
if (f->copydata->hashtable) {
- ptr_array_add((ptrarray_t*)f->copydata->hashtable, newch);
+ if (ptr_array_add((ptrarray_t*)f->copydata->hashtable, newch) < 0) {
+ ptr_array_free((ptrarray_t*)f->copydata->hashtable);
+ f->copydata->hashtable = NULL;
+ }
}
break;
@@ -987,7 +990,11 @@ static void _plist_array_post_insert(plist_t node, plist_t item, long n)
ptrarray_t *pa = (ptrarray_t*)((plist_data_t)((node_t)node)->data)->hashtable;
if (pa) {
/* store pointer to item in array */
- ptr_array_insert(pa, item, n);
+ if (ptr_array_insert(pa, item, n) < 0) {
+ /* lookup array would be out of sync, drop it */
+ ptr_array_free(pa);
+ ((plist_data_t)((node_t)node)->data)->hashtable = NULL;
+ }
return;
}
@@ -999,7 +1006,10 @@ static void _plist_array_post_insert(plist_t node, plist_t item, long n)
pa && current;
current = (plist_t)node_next_sibling((node_t)current))
{
- ptr_array_add(pa, current);
+ if (ptr_array_add(pa, current) < 0) {
+ ptr_array_free(pa);
+ pa = NULL;
+ }
}
((plist_data_t)((node_t)node)->data)->hashtable = pa;
}