librz/type: fix parsing and pretty-printing memory leaks (#6441)
Co-authored-by: Anton Kochkov <anton.kochkov@gmail.com>
This commit is contained in:
parent
7e42c9a4d7
commit
af5ddda795
3 changed files with 13 additions and 5 deletions
|
|
@ -14,7 +14,9 @@ static void pdb_types_print_standard(const RzTypeDB *db, const RzPdb *pdb, const
|
|||
RzBaseType *type;
|
||||
RzStrBuf *buf = rz_strbuf_new(NULL);
|
||||
rz_list_foreach (types, it, type) {
|
||||
rz_strbuf_append(buf, rz_type_db_base_type_as_pretty_string(db, type, RZ_TYPE_PRINT_MULTILINE | RZ_TYPE_PRINT_END_NEWLINE, 1));
|
||||
char *pretty = rz_type_db_base_type_as_pretty_string(db, type, RZ_TYPE_PRINT_MULTILINE | RZ_TYPE_PRINT_END_NEWLINE, 1);
|
||||
rz_strbuf_append(buf, pretty);
|
||||
free(pretty);
|
||||
}
|
||||
rz_cons_print(rz_strbuf_get(buf));
|
||||
rz_strbuf_free(buf);
|
||||
|
|
|
|||
|
|
@ -321,7 +321,9 @@ RZ_API RZ_OWN char *rz_type_db_base_type_as_pretty_string(RZ_NONNULL const RzTyp
|
|||
rz_return_val_if_fail(typedb && btype, NULL);
|
||||
|
||||
RzType *type = rz_type_identifier_of_base_type(typedb, btype, false);
|
||||
return rz_type_as_pretty_string(typedb, type, NULL, opts, unfold_level);
|
||||
char *ret = rz_type_as_pretty_string(typedb, type, NULL, opts, unfold_level);
|
||||
rz_type_free(type);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -539,8 +539,9 @@ int parse_struct_node(CParserState *state, TSNode node, const char *text, Parser
|
|||
result = -1;
|
||||
goto srnexit;
|
||||
}
|
||||
const char *bits_str = ts_node_sub_string(field_bits, text);
|
||||
char *bits_str = ts_node_sub_string(field_bits, text);
|
||||
int bits = rz_num_get(NULL, bits_str);
|
||||
free(bits_str);
|
||||
parser_debug(state, "field type: %s field_identifier: %s bits: %d\n", real_type, real_identifier, bits);
|
||||
// Then we augment resulting type field with the data from parsed declarator
|
||||
char *membname = NULL;
|
||||
|
|
@ -593,7 +594,9 @@ int parse_struct_node(CParserState *state, TSNode node, const char *text, Parser
|
|||
}
|
||||
parser_debug(state, "Appended member \"%s\" into struct \"%s\"\n", membname, name);
|
||||
} else {
|
||||
parser_debug(state, "Struct field wrong: \"%s\"\n", ts_node_sub_string(field_declarator, text));
|
||||
char *wrong = ts_node_sub_string(field_declarator, text);
|
||||
parser_debug(state, "Struct field wrong: \"%s\"\n", wrong);
|
||||
free(wrong);
|
||||
}
|
||||
field_declarator = ts_node_next_named_sibling(field_declarator);
|
||||
} while (!ts_node_is_null(field_declarator));
|
||||
|
|
@ -832,8 +835,9 @@ int parse_union_node(CParserState *state, TSNode node, const char *text, ParserT
|
|||
result = -1;
|
||||
goto urnexit;
|
||||
}
|
||||
const char *bits_str = ts_node_sub_string(field_bits, text);
|
||||
char *bits_str = ts_node_sub_string(field_bits, text);
|
||||
int bits = rz_num_get(NULL, bits_str);
|
||||
free(bits_str);
|
||||
parser_debug(state, "field type: %s field_identifier: %s bits: %d\n", real_type, real_identifier, bits);
|
||||
// Then we augment resulting type field with the data from parsed declarator
|
||||
char *membname = NULL;
|
||||
|
|
|
|||
Loading…
Reference in a new issue