From b7f57ab908d97b6980b5f90fbb8122a0d57cc451 Mon Sep 17 00:00:00 2001 From: Katharina Fey Date: Sun, 28 Aug 2016 23:57:20 +0200 Subject: No longer allow to free shallow copies of nodes --- lib/dtree.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/dtree.c b/lib/dtree.c index cd9b1f2..cb2578d 100644 --- a/lib/dtree.c +++ b/lib/dtree.c @@ -41,6 +41,7 @@ dt_err dtree_resettype(dtree *data) { if(data->type == LITERAL) { if(data->payload.literal) free(data->payload.literal); + } else if(data->type == LIST || data->type == PAIR) { /* Iterate over all children and clear them */ @@ -48,6 +49,7 @@ dt_err dtree_resettype(dtree *data) dt_err err; for(i = 0; i < data->size; i++) { err = dtree_free(data->payload.list[i]); + memset(data->payload.list[i], 0, sizeof(data->payload.list[i])); if(err) return err; } } @@ -523,6 +525,7 @@ dt_err dtree_get(dtree *data, void *(*val)) dt_err dtree_free(dtree *data) { if(data == NULL) return SUCCESS; + if(data->copy == SHALLOW) return NODE_NOT_ORIGINAL; if(data->type == LITERAL) { if(data->payload.literal) free(data->payload.literal); @@ -531,7 +534,6 @@ dt_err dtree_free(dtree *data) int i; dt_err err; for(i = 0; i < data->used; i++) { - if(data->copy == SHALLOW) continue; err = dtree_free(data->payload.list[i]); if(err) return err; -- cgit v1.2.3