Skip to content

Commit

Permalink
Fix double free of enum member name (rizinorg#2817)
Browse files Browse the repository at this point in the history
  • Loading branch information
GustavoLCR authored Jul 19, 2022
1 parent 88459c0 commit 35cf52e
Show file tree
Hide file tree
Showing 4 changed files with 4 additions and 5 deletions.
3 changes: 1 addition & 2 deletions librz/core/cmd/cmd_type.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,12 @@ static void types_cc_print(RzCore *core, const char *cc, RzOutputMode mode) {
static RzCmdStatus types_enum_member_find(RzCore *core, const char *enum_name, const char *enum_value) {
rz_return_val_if_fail(enum_name || enum_value, RZ_CMD_STATUS_ERROR);
ut64 value = rz_num_math(core->num, enum_value);
char *enum_member = rz_type_db_enum_member_by_val(core->analysis->typedb, enum_name, value);
const char *enum_member = rz_type_db_enum_member_by_val(core->analysis->typedb, enum_name, value);
if (!enum_member) {
RZ_LOG_ERROR("Cannot find matching enum member");
return RZ_CMD_STATUS_ERROR;
}
rz_cons_println(enum_member);
free(enum_member);
return RZ_CMD_STATUS_OK;
}

Expand Down
2 changes: 1 addition & 1 deletion librz/include/rz_type.h
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,7 @@ RZ_API RzBaseType *rz_type_db_get_struct(const RzTypeDB *typedb, const char *nam
RZ_API RzBaseType *rz_type_db_get_typedef(const RzTypeDB *typedb, RZ_NONNULL const char *name);

RZ_API int rz_type_db_enum_member_by_name(const RzTypeDB *typedb, const char *name, const char *member);
RZ_API RZ_BORROW char *rz_type_db_enum_member_by_val(const RzTypeDB *typedb, const char *name, ut64 val);
RZ_API RZ_BORROW const char *rz_type_db_enum_member_by_val(const RzTypeDB *typedb, const char *name, ut64 val);
RZ_API RZ_OWN RzList *rz_type_db_find_enums_by_val(const RzTypeDB *typedb, ut64 val);
RZ_API char *rz_type_db_enum_get_bitfield(const RzTypeDB *typedb, const char *name, ut64 val);

Expand Down
2 changes: 1 addition & 1 deletion librz/type/format.c
Original file line number Diff line number Diff line change
Expand Up @@ -1363,7 +1363,7 @@ static void rz_type_format_bitfield(const RzTypeDB *typedb, RzStrBuf *outbuf, ut

static void rz_type_format_enum(const RzTypeDB *typedb, RzStrBuf *outbuf, ut64 seeki, char *fmtname,
char *fieldname, ut64 addr, int mode, int size) {
char *enumvalue = NULL;
const char *enumvalue = NULL;
addr &= (1ULL << (size * 8)) - 1;
if (MUSTSEE && !SEEVALUE) {
rz_strbuf_appendf(outbuf, "0x%08" PFMT64x " = ", seeki);
Expand Down
2 changes: 1 addition & 1 deletion librz/type/type.c
Original file line number Diff line number Diff line change
Expand Up @@ -505,7 +505,7 @@ RZ_API RzBaseType *rz_type_db_get_enum(const RzTypeDB *typedb, RZ_NONNULL const
* \param name The name of the enum to search in
* \param val The value to search for
*/
RZ_API RZ_BORROW char *rz_type_db_enum_member_by_val(const RzTypeDB *typedb, RZ_NONNULL const char *name, ut64 val) {
RZ_API RZ_BORROW const char *rz_type_db_enum_member_by_val(const RzTypeDB *typedb, RZ_NONNULL const char *name, ut64 val) {
rz_return_val_if_fail(typedb && name, NULL);
RzBaseType *btype = rz_type_db_get_base_type(typedb, name);
if (!btype) {
Expand Down

0 comments on commit 35cf52e

Please sign in to comment.