Skip to content

Commit d63ecb5

Browse files
resolve free(): invalid pointer
1 parent 8500c08 commit d63ecb5

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

code/logic/xml.c

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -60,20 +60,28 @@ fossil_media_xml_node_t *fossil_media_xml_new_comment(const char *comment) {
6060

6161
void fossil_media_xml_free(fossil_media_xml_node_t *node) {
6262
if (!node) return;
63-
free(node->name);
64-
free(node->content);
63+
if (node->name) free(node->name);
64+
if (node->content) free(node->content);
6565

66-
for (size_t i = 0; i < node->child_count; i++) {
67-
fossil_media_xml_free(node->children[i]);
66+
if (node->children) {
67+
for (size_t i = 0; i < node->child_count; i++) {
68+
fossil_media_xml_free(node->children[i]);
69+
}
70+
free(node->children);
6871
}
69-
free(node->children);
7072

71-
for (size_t i = 0; i < node->attr_count; i++) {
72-
free(node->attr_names[i]);
73-
free(node->attr_values[i]);
73+
if (node->attr_names) {
74+
for (size_t i = 0; i < node->attr_count; i++) {
75+
if (node->attr_names[i]) free(node->attr_names[i]);
76+
}
77+
free(node->attr_names);
78+
}
79+
if (node->attr_values) {
80+
for (size_t i = 0; i < node->attr_count; i++) {
81+
if (node->attr_values[i]) free(node->attr_values[i]);
82+
}
83+
free(node->attr_values);
7484
}
75-
free(node->attr_names);
76-
free(node->attr_values);
7785

7886
free(node);
7987
}

0 commit comments

Comments
 (0)