mirror of
https://github.com/radareorg/radare2.git
synced 2025-03-06 13:29:46 +00:00
Fix a few anal leaks (#5076)
Mostly sdb_get() calls turned into sdb_const_get(), but there are others.
This commit is contained in:
parent
8a96ec635d
commit
58c5a333c0
@ -281,6 +281,7 @@ void extract_arg (RAnal *anal, RAnalFunction *fcn, RAnalOp *op, const char *reg,
|
|||||||
if(!sig) return;
|
if(!sig) return;
|
||||||
op_esil = r_strbuf_get (&op->esil);
|
op_esil = r_strbuf_get (&op->esil);
|
||||||
if (!op_esil) {
|
if (!op_esil) {
|
||||||
|
free (sig);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
esil_buf = strdup (op_esil);
|
esil_buf = strdup (op_esil);
|
||||||
@ -317,6 +318,8 @@ void extract_arg (RAnal *anal, RAnalFunction *fcn, RAnalOp *op, const char *reg,
|
|||||||
r_anal_var_access (anal, fcn->addr, 'v', 1, ptr, 1, op->addr);
|
r_anal_var_access (anal, fcn->addr, 'v', 1, ptr, 1, op->addr);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
free (varname);
|
||||||
|
free (sig);
|
||||||
free (esil_buf);
|
free (esil_buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@ R_API void r_anal_op_free(void *_op) {
|
|||||||
|
|
||||||
static RAnalVar *get_used_var(RAnal *anal, RAnalOp *op) {
|
static RAnalVar *get_used_var(RAnal *anal, RAnalOp *op) {
|
||||||
char *inst_key = sdb_fmt (0, "inst.0x%"PFMT64x".vars", op->addr);
|
char *inst_key = sdb_fmt (0, "inst.0x%"PFMT64x".vars", op->addr);
|
||||||
char *var_def = sdb_get (anal->sdb_fcns, inst_key, 0);
|
const char *var_def = sdb_const_get (anal->sdb_fcns, inst_key, 0);
|
||||||
struct VarUsedType vut;
|
struct VarUsedType vut;
|
||||||
RAnalVar *res;
|
RAnalVar *res;
|
||||||
|
|
||||||
|
@ -173,7 +173,7 @@ R_API bool r_anal_var_delete_byname (RAnal *a, RAnalFunction *fcn, int kind, con
|
|||||||
if (varlist && *varlist) {
|
if (varlist && *varlist) {
|
||||||
do {
|
do {
|
||||||
char *word = sdb_anext (ptr, &next);
|
char *word = sdb_anext (ptr, &next);
|
||||||
char *vardef = sdb_get (DB, sdb_fmt (1,
|
const char *vardef = sdb_const_get (DB, sdb_fmt (1,
|
||||||
"var.0x%"PFMT64x".%c.%s",
|
"var.0x%"PFMT64x".%c.%s",
|
||||||
fcn->addr, kind, word), 0);
|
fcn->addr, kind, word), 0);
|
||||||
int delta = strlen (word) < 3 ? -1 : atoi (word + 2);
|
int delta = strlen (word) < 3 ? -1 : atoi (word + 2);
|
||||||
@ -213,7 +213,7 @@ R_API RAnalVar *r_anal_var_get (RAnal *a, ut64 addr, char kind, int scope, int d
|
|||||||
kind = 'v';
|
kind = 'v';
|
||||||
delta = -delta;
|
delta = -delta;
|
||||||
}
|
}
|
||||||
char *vardef = sdb_get (DB,
|
const char *vardef = sdb_const_get (DB,
|
||||||
sdb_fmt (0, "var.0x%"PFMT64x".%c.%d.%d",
|
sdb_fmt (0, "var.0x%"PFMT64x".%c.%d.%d",
|
||||||
fcn->addr, kind, scope, delta), 0);
|
fcn->addr, kind, scope, delta), 0);
|
||||||
if (!vardef) {
|
if (!vardef) {
|
||||||
@ -222,7 +222,10 @@ R_API RAnalVar *r_anal_var_get (RAnal *a, ut64 addr, char kind, int scope, int d
|
|||||||
sdb_fmt_tobin (vardef, SDB_VARTYPE_FMT, &vt);
|
sdb_fmt_tobin (vardef, SDB_VARTYPE_FMT, &vt);
|
||||||
|
|
||||||
av = R_NEW0 (RAnalVar);
|
av = R_NEW0 (RAnalVar);
|
||||||
if (!av) return NULL;
|
if (!av) {
|
||||||
|
sdb_fmt_free (&vt, SDB_VARTYPE_FMT);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
av->addr = addr;
|
av->addr = addr;
|
||||||
av->scope = scope;
|
av->scope = scope;
|
||||||
av->delta = delta;
|
av->delta = delta;
|
||||||
@ -355,7 +358,7 @@ R_API int r_anal_var_count(RAnal *a, RAnalFunction *fcn, int kind) {
|
|||||||
if (varlist && *varlist) {
|
if (varlist && *varlist) {
|
||||||
do {
|
do {
|
||||||
char *word = sdb_anext (ptr, &next);
|
char *word = sdb_anext (ptr, &next);
|
||||||
char *vardef = sdb_get (DB, sdb_fmt (1,
|
const char *vardef = sdb_const_get (DB, sdb_fmt (1,
|
||||||
"var.0x%"PFMT64x".%c.%s",
|
"var.0x%"PFMT64x".%c.%s",
|
||||||
fcn->addr, kind, word), 0);
|
fcn->addr, kind, word), 0);
|
||||||
if (vardef) {
|
if (vardef) {
|
||||||
@ -387,7 +390,7 @@ R_API RList *r_anal_var_list(RAnal *a, RAnalFunction *fcn, int kind) {
|
|||||||
do {
|
do {
|
||||||
struct VarType vt;
|
struct VarType vt;
|
||||||
char *word = sdb_anext (ptr, &next);
|
char *word = sdb_anext (ptr, &next);
|
||||||
char *vardef = sdb_get (DB, sdb_fmt (1,
|
const char *vardef = sdb_const_get (DB, sdb_fmt (1,
|
||||||
"var.0x%"PFMT64x".%c.%s",
|
"var.0x%"PFMT64x".%c.%s",
|
||||||
fcn->addr, kind, word), 0);
|
fcn->addr, kind, word), 0);
|
||||||
int delta = atoi (word+2);
|
int delta = atoi (word+2);
|
||||||
@ -408,7 +411,6 @@ R_API RList *r_anal_var_list(RAnal *a, RAnalFunction *fcn, int kind) {
|
|||||||
av->type = strdup (vt.type);
|
av->type = strdup (vt.type);
|
||||||
r_list_append (list, av);
|
r_list_append (list, av);
|
||||||
sdb_fmt_free (&vt, SDB_VARTYPE_FMT);
|
sdb_fmt_free (&vt, SDB_VARTYPE_FMT);
|
||||||
free (vardef);
|
|
||||||
} else {
|
} else {
|
||||||
// eprintf ("Cannot find var definition for '%s'\n", word);
|
// eprintf ("Cannot find var definition for '%s'\n", word);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user