summaryrefslogtreecommitdiff
path: root/ext/syck/node.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/syck/node.c')
-rw-r--r--ext/syck/node.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/ext/syck/node.c b/ext/syck/node.c
index f999700554..99bb07bc74 100644
--- a/ext/syck/node.c
+++ b/ext/syck/node.c
@@ -297,27 +297,38 @@ syck_seq_read( SyckNode *seq, long idx )
void
syck_free_members( SyckNode *n )
{
+ if ( n == NULL ) return;
+
switch ( n->kind )
{
case syck_str_kind:
- if ( n->data.str->ptr != NULL )
+ if ( n->data.str != NULL )
{
S_FREE( n->data.str->ptr );
n->data.str->ptr = NULL;
n->data.str->len = 0;
S_FREE( n->data.str );
+ n->data.str = NULL;
}
break;
case syck_seq_kind:
- S_FREE( n->data.list->items );
- S_FREE( n->data.list );
+ if ( n->data.list != NULL )
+ {
+ S_FREE( n->data.list->items );
+ S_FREE( n->data.list );
+ n->data.list = NULL;
+ }
break;
case syck_map_kind:
- S_FREE( n->data.pairs->keys );
- S_FREE( n->data.pairs->values );
- S_FREE( n->data.pairs );
+ if ( n->data.pairs != NULL )
+ {
+ S_FREE( n->data.pairs->keys );
+ S_FREE( n->data.pairs->values );
+ S_FREE( n->data.pairs );
+ n->data.pairs = NULL;
+ }
break;
}
}