Fix the missing release of RZ_OWN parameters (#5641)

This commit is contained in:
Peiwei Hu 2025-12-21 13:48:48 +08:00 committed by GitHub
parent 232e2a1be3
commit 8ca45d1ea5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 25 additions and 6 deletions

View file

@ -1386,6 +1386,7 @@ RZ_API RZ_OWN RzAsmTokenString *rz_asm_token_string_clone(RZ_OWN RZ_NONNULL RzAs
RzAsmTokenString *newt = RZ_NEW0(RzAsmTokenString);
if (!newt) {
rz_asm_token_string_free(toks);
return NULL;
}
newt->tokens = rz_pvector_clonef(toks->tokens, (RzPVectorItemCpyFunc)clone_asm_token);

View file

@ -462,6 +462,7 @@ static RzILOpBitVector *replicated_val(ut32 val_width, ut32 dreg_width, RZ_OWN R
ut32 repeat_times = dreg_width / val_width;
if (dreg_width % val_width != 0) {
rz_warn_if_reached();
rz_il_op_pure_free(val);
return NULL;
}

View file

@ -468,6 +468,7 @@ static RzILOpEffect *sh_il_set_param_pc_ctx(SHParam param, RZ_OWN RzILOpPure *va
case SH_IMM_S:
default:
RZ_LOG_ERROR("RzIL: SuperH: Cannot set value for addressing mode: %u\n", param.mode);
rz_il_op_pure_free(val);
return NULL;
}

View file

@ -1821,8 +1821,6 @@ RZ_API void rz_analysis_fcn_vars_add_types(RzAnalysis *analysis, RZ_NONNULL RzAn
RzCallableArg *arg = rz_type_callable_arg_new(analysis->typedb, var->name, cloned);
if (arg) {
rz_type_callable_arg_add(callable, arg);
} else {
rz_type_free(cloned);
}
}
}

View file

@ -129,7 +129,7 @@ static char *str_ndup_safe(const ut8 *b, const ut8 *str, ut64 len, const ut8 *en
return NULL;
}
RZ_API RzCoreSymCacheElement *rz_coresym_cache_element_new(RzBinFile *bf, RzBuffer *buf, ut64 off, int bits, RZ_OWN char *file_name) {
RZ_API RzCoreSymCacheElement *rz_coresym_cache_element_new(RzBinFile *bf, RzBuffer *buf, ut64 off, int bits, RZ_BORROW char *file_name) {
RzCoreSymCacheElement *result = NULL;
ut8 *b = NULL;
RzCoreSymCacheElementHdr *hdr = rz_coresym_cache_element_header_new(buf, off, bits);

View file

@ -81,7 +81,7 @@ typedef struct rz_coresym_cache_element_t {
RzCoreSymCacheElementLineInfo *line_info;
} RzCoreSymCacheElement;
RZ_API RzCoreSymCacheElement *rz_coresym_cache_element_new(RzBinFile *bf, RzBuffer *buf, ut64 off, int bits, RZ_OWN char *file_name);
RZ_API RzCoreSymCacheElement *rz_coresym_cache_element_new(RzBinFile *bf, RzBuffer *buf, ut64 off, int bits, RZ_BORROW char *file_name);
RZ_API void rz_coresym_cache_element_free(RzCoreSymCacheElement *element);
RZ_API ut64 rz_coresym_cache_element_pa2va(RzCoreSymCacheElement *element, ut64 pa);

View file

@ -186,7 +186,7 @@ static RzBinSymbol *bin_symbol_from_symbol(RzCoreSymCacheElement *element, RzCor
return sym;
}
static RzCoreSymCacheElement *parseDragons(RzBinFile *bf, RzBuffer *buf, int off, int bits, RZ_OWN char *file_name) {
static RzCoreSymCacheElement *parseDragons(RzBinFile *bf, RzBuffer *buf, int off, int bits, RZ_BORROW char *file_name) {
D eprintf("Dragons at 0x%x\n", off);
ut64 size = rz_buf_size(buf);
if (off >= size) {
@ -203,6 +203,7 @@ static RzCoreSymCacheElement *parseDragons(RzBinFile *bf, RzBuffer *buf, int off
int available = rz_buf_read_at(buf, off, b, size);
if (available != size) {
RZ_LOG_ERROR("bin: symbols: cannot read at 0x%08x\n", off);
free(b);
return NULL;
}
// after the list of sections, there's a bunch of unknown
@ -239,6 +240,7 @@ static RzCoreSymCacheElement *parseDragons(RzBinFile *bf, RzBuffer *buf, int off
available = rz_buf_read_at(buf, off - 8, b, size);
if (available != size) {
RZ_LOG_WARN("bin: symbols: rz_buf_read_at failed\n");
free(b);
return NULL;
}
if (size > 3 && !memcmp("\x1a\x2b\xb2\xa1", b, 4)) { // 0x130 ?

View file

@ -1943,6 +1943,7 @@ static RzCmdStatus byte_pattern_search(RzCore *core, RZ_OWN RzSearchBytesPattern
return cmd_core_handle_search_hits(core, state, hits);
error:
rz_search_bytes_pattern_free(pattern);
rz_list_free(hits);
rz_search_opt_free(search_opts);
CMD_SEARCH_END();
@ -1974,6 +1975,7 @@ static RzCmdStatus value_range_search(RzCore *core, RZ_OWN RzVector /*<RzSearchV
return cmd_core_handle_search_hits(core, state, hits);
error:
rz_vector_free(ranges);
rz_list_free(hits);
rz_search_opt_free(search_opts);
CMD_SEARCH_END();

View file

@ -30,6 +30,8 @@ RZ_API RZ_OWN RzSearchBytesPattern *rz_search_bytes_pattern_new(RZ_OWN ut8 *byte
RzSearchBytesPattern *pat = RZ_NEW0(RzSearchBytesPattern);
if (!pat) {
RZ_LOG_ERROR("Failed to allocate pattern struct.\n");
free(bytes);
free(mask);
return NULL;
}
pat->bytes = bytes;
@ -303,11 +305,13 @@ RZ_API bool rz_search_collection_bytes_add_pattern(RZ_NONNULL RzSearchCollection
if (!rz_search_collection_has_find_callback(col, bytes_find)) {
RZ_LOG_ERROR("search: cannot add hex to non-bytes collection\n");
rz_search_bytes_pattern_free(bytes_pattern);
return false;
}
if (!rz_pvector_push((RzPVector *)col->user, bytes_pattern)) {
RZ_LOG_ERROR("search: cannot add byte pattern to search.\n");
rz_search_bytes_pattern_free(bytes_pattern);
return false;
}
return true;

View file

@ -70,6 +70,7 @@ RZ_API RZ_OWN RzCallableArg *rz_type_callable_arg_new(RzTypeDB *typedb, RZ_NONNU
rz_return_val_if_fail(typedb && name && type, NULL);
RzCallableArg *arg = RZ_NEW0(RzCallableArg);
if (!arg) {
rz_type_free(type);
return NULL;
}
arg->name = rz_str_dup(name);
@ -132,6 +133,7 @@ RZ_API RZ_OWN RzCallable *rz_type_func_new(RzTypeDB *typedb, RZ_NONNULL const ch
rz_return_val_if_fail(typedb && name, NULL);
RzCallable *callable = rz_type_callable_new(name);
if (!callable) {
rz_type_free(type);
return NULL;
}
callable->ret = type;
@ -339,6 +341,7 @@ RZ_API bool rz_type_func_arg_add(RzTypeDB *typedb, RZ_NONNULL const char *func_n
rz_return_val_if_fail(typedb && func_name, false);
RzCallable *callable = rz_type_func_get(typedb, func_name);
if (!callable) {
rz_type_free(arg_type);
return false;
}
RzCallableArg *arg = rz_type_callable_arg_new(typedb, arg_name, arg_type);

View file

@ -177,6 +177,7 @@ RZ_API RZ_OWN RzType *rz_type_callable(RZ_NONNULL RZ_OWN RzCallable *callable) {
rz_return_val_if_fail(callable, NULL);
RzType *newtype = RZ_NEW0(RzType);
if (!newtype) {
rz_type_callable_free(callable);
return NULL;
}
newtype->kind = RZ_TYPE_KIND_CALLABLE;

View file

@ -838,12 +838,14 @@ bool c_parser_new_callable_argument(CParserState *state, RZ_NONNULL RzCallable *
rz_pvector_foreach (callable->args, it) {
RzCallableArg *arg = *it;
if (!strcmp(arg->name, name)) {
rz_type_free(type);
return false;
}
}
// And only if there is no argument with the same name - proceed to insert it
RzCallableArg *arg = RZ_NEW0(RzCallableArg);
if (!arg) {
rz_type_free(type);
return false;
}
arg->name = rz_str_dup(name);

View file

@ -14,6 +14,7 @@ RZ_API RZ_OWN RzTypePath *rz_type_path_new(RZ_BORROW RZ_NONNULL RzType *type, RZ
rz_return_val_if_fail(type && path, NULL);
RzTypePath *tpath = RZ_NEW0(RzTypePath);
if (!tpath) {
RZ_FREE(path);
return NULL;
}
tpath->typ = type;

View file

@ -84,7 +84,6 @@ static RzCallable *get_callable_type(RzTypeDB *typedb, Sdb *sdb, const char *nam
RzCallableArg *arg = rz_type_callable_arg_new(typedb, argument_name, ttype);
if (!arg) {
free(values);
rz_type_free(ttype);
goto error;
}
free(values);

View file

@ -499,6 +499,10 @@ RZ_API void *rz_pvector_assign_at(RZ_BORROW RZ_NONNULL RzPVector *vec, size_t in
rz_return_val_if_fail(vec && ptr, NULL);
void **p = rz_vector_index_ptr(&vec->v, index);
if (!p) {
if (vec->v.free_user) {
RzPVectorFree free_fn = (RzPVectorFree)vec->v.free_user;
free_fn(ptr);
}
return NULL;
}
void *prev = *p;