mirror of
https://github.com/radareorg/radare2.git
synced 2024-10-07 02:23:58 +00:00
Fix varsub build (fix inter-module dependency issue) and catch overflow
This commit is contained in:
parent
cace7101e5
commit
b7a8af83dc
@ -742,6 +742,7 @@ R_API int r_core_init(RCore *core) {
|
||||
core->anal->printf = (void *) r_cons_printf;
|
||||
core->parser = r_parse_new ();
|
||||
core->parser->anal = core->anal;
|
||||
core->parser->varlist = r_anal_var_list;
|
||||
r_parse_set_user_ptr (core->parser, core);
|
||||
core->bin = r_bin_new ();
|
||||
core->bin->printf = (PrintfCallback) r_cons_printf;
|
||||
|
@ -17,6 +17,8 @@ extern "C" {
|
||||
|
||||
R_LIB_VERSION_HEADER(r_parse);
|
||||
|
||||
typedef RList* (*RAnalVarList)(RAnal *anal, RAnalFunction *fcn, int kind);
|
||||
|
||||
typedef struct r_parse_t {
|
||||
void *user;
|
||||
int flagspace;
|
||||
@ -24,6 +26,7 @@ typedef struct r_parse_t {
|
||||
struct r_parse_plugin_t *cur;
|
||||
RAnal *anal; // weak anal ref
|
||||
RList *parsers;
|
||||
RAnalVarList varlist;
|
||||
} RParse;
|
||||
|
||||
typedef struct r_parse_plugin_t {
|
||||
|
@ -164,7 +164,6 @@ static inline int issegoff (const char *w) {
|
||||
#endif
|
||||
|
||||
static int varsub(RParse *p, RAnalFunction *f, char *data, char *str, int len) {
|
||||
// strncpy (str, data, len);
|
||||
#if USE_VARSUBS
|
||||
int i;
|
||||
char *ptr, *ptr2;
|
||||
@ -179,13 +178,18 @@ static int varsub(RParse *p, RAnalFunction *f, char *data, char *str, int len) {
|
||||
}
|
||||
return R_TRUE;
|
||||
#else
|
||||
RList *vars = r_anal_var_list (p->anal, f, 'v');
|
||||
RList *args = r_anal_var_list (p->anal, f, 'a');
|
||||
r_list_join (vars, args);
|
||||
RAnalVar *var;
|
||||
RListIter *iter;
|
||||
char oldstr[64], newstr[64];
|
||||
char *tstr = strdup (data);
|
||||
RList *vars, *args;
|
||||
|
||||
if (!p->varlist)
|
||||
return R_FALSE;
|
||||
|
||||
vars = p->varlist (p->anal, f, 'v');
|
||||
args = p->varlist (p->anal, f, 'a');
|
||||
r_list_join (vars, args);
|
||||
r_list_foreach (vars, iter, var) {
|
||||
snprintf (oldstr, sizeof (oldstr)-1, "[%s - 0x%x]",
|
||||
p->anal->reg->name[R_REG_NAME_BP],
|
||||
@ -198,8 +202,13 @@ static int varsub(RParse *p, RAnalFunction *f, char *data, char *str, int len) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
strncpy (str, tstr, strlen(tstr));
|
||||
str[strlen (tstr)] = 0;
|
||||
if (len > strlen (tstr)) {
|
||||
strncpy (str, tstr, strlen(tstr));
|
||||
str[strlen (tstr)] = 0;
|
||||
} else {
|
||||
// TOO BIG STRING CANNOT REPLACE HERE
|
||||
}
|
||||
free (tstr);
|
||||
return R_TRUE;
|
||||
#endif
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user