diff options
Diffstat (limited to 'src/bencode.c')
-rw-r--r-- | src/bencode.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/bencode.c b/src/bencode.c index 3eacebb..c9c9b6a 100644 --- a/src/bencode.c +++ b/src/bencode.c @@ -180,12 +180,6 @@ be_node *be_decode(const char *data) return be_decoden(data, strlen(data)); } -static inline void _be_free_str(char *str) -{ - if (str) - g_free(str - sizeof(gint64)); -} - int be_validate_node(be_node * node, int type) { if (!node || node->type != type) @@ -194,6 +188,12 @@ int be_validate_node(be_node * node, int type) return 0; } +static inline void _be_free_str(char *str) +{ + if (str) + g_free(str - sizeof(gint64)); +} + void be_free(be_node * node) { switch (node->type) { @@ -206,9 +206,11 @@ void be_free(be_node * node) case BE_LIST:{ unsigned int i; - for (i = 0; node->val.l[i]; ++i) - be_free(node->val.l[i]); - g_free(node->val.l); + if (node->val.l) { + for (i = 0; node->val.l[i]; ++i) + be_free(node->val.l[i]); + g_free(node->val.l); + } break; } |