aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKatharina Fey <kookie@spacekookie.de>2016-08-28 23:57:20 +0200
committerKatharina Fey <kookie@spacekookie.de>2019-06-04 20:21:03 +0200
commitb7f57ab908d97b6980b5f90fbb8122a0d57cc451 (patch)
treeaf27beff270c547a9dd6321a100c18b2d502e778
parent8d3da701c0cb3410a947a84d5147368744c774ec (diff)
No longer allow to free shallow copies of nodes
-rw-r--r--lib/dtree.c4
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;