From 346bb6375f57c83dbad6ec49c95846e1e420243b Mon Sep 17 00:00:00 2001 From: Rot127 <45763064+Rot127@users.noreply.github.com> Date: Thu, 16 Apr 2026 16:09:52 +0000 Subject: [PATCH] librz/arch: fix some memory leaks (#6240) --- librz/arch/class.c | 4 +++- test/unit/test_serialize_analysis.c | 11 +++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/librz/arch/class.c b/librz/arch/class.c index 5e5234dc10..671b056c3c 100644 --- a/librz/arch/class.c +++ b/librz/arch/class.c @@ -1196,7 +1196,9 @@ RZ_API RzAnalysisClassErr rz_analysis_class_vtable_set(RzAnalysis *analysis, con return err; } - rz_analysis_class_set_flag(analysis, flagname_vtable(class_name, vtable->id), vtable->addr, vtable->size); + char *flagname = flagname_vtable(class_name, vtable->id); + rz_analysis_class_set_flag(analysis, flagname, vtable->addr, vtable->size); + free(flagname); return RZ_ANALYSIS_CLASS_ERR_SUCCESS; } diff --git a/test/unit/test_serialize_analysis.c b/test/unit/test_serialize_analysis.c index 8daf173f04..e00df2c786 100644 --- a/test/unit/test_serialize_analysis.c +++ b/test/unit/test_serialize_analysis.c @@ -444,14 +444,14 @@ static RzAnalysisVarStorage *composite_stor(RzAnalysisVarStorage *stor) { .storage = RZ_NEW0(RzAnalysisVarStorage) }; p1.storage->type = RZ_ANALYSIS_VAR_STORAGE_REG; - p1.storage->reg = strdup("rax"); + p1.storage->reg = "rax"; RzAnalysisVarStoragePiece p2 = { .offset_in_bits = 32, .size_in_bits = 32, .storage = RZ_NEW0(RzAnalysisVarStorage) }; p2.storage->type = RZ_ANALYSIS_VAR_STORAGE_REG; - p2.storage->reg = strdup("rbx"); + p2.storage->reg = "rbx"; rz_vector_push(stor->composite, &p1); rz_vector_push(stor->composite, &p2); return stor; @@ -521,6 +521,10 @@ bool test_analysis_var_save() { sdb_free(db); sdb_free(expected); + rz_type_free(t_int64_t); + rz_type_free(t_uint64_t); + rz_type_free(t_struct_something); + rz_type_free(t_const_char_ptr); rz_analysis_free(analysis); mu_end; } @@ -543,10 +547,13 @@ bool test_analysis_var_load() { RzType *t_int64_t = rz_type_identifier_of_base_type_str(analysis->typedb, "int64_t"); mu_assert_notnull(t_int64_t, "has int64_t type"); + rz_type_free(t_int64_t); RzType *t_uint64_t = rz_type_identifier_of_base_type_str(analysis->typedb, "uint64_t"); mu_assert_notnull(t_uint64_t, "has uint64_t type"); + rz_type_free(t_uint64_t); RzType *t_const_char_ptr = rz_type_pointer_of_base_type_str(analysis->typedb, "char", true); mu_assert_notnull(t_const_char_ptr, "has \"const char *\" type"); + rz_type_free(t_const_char_ptr); RzAnalysisVar *v = rz_analysis_function_get_reg_var_at(f, "rax"); mu_assert_notnull(v, "var");