diff options
author | Katharina Fey <kookie@spacekookie.de> | 2016-08-28 23:57:20 +0200 |
---|---|---|
committer | Katharina Fey <kookie@spacekookie.de> | 2019-06-04 20:21:03 +0200 |
commit | b7f57ab908d97b6980b5f90fbb8122a0d57cc451 (patch) | |
tree | af27beff270c547a9dd6321a100c18b2d502e778 | |
parent | 8d3da701c0cb3410a947a84d5147368744c774ec (diff) |
No longer allow to free shallow copies of nodes
-rw-r--r-- | lib/dtree.c | 4 |
1 files changed, 3 insertions, 1 deletions
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; |