mirror of
https://github.com/radareorg/radare2.git
synced 2024-10-07 18:43:45 +00:00
Fix double free in class method handling ##bin
This commit is contained in:
parent
01e164d1ba
commit
a447839f5a
@ -1112,6 +1112,7 @@ R_API RBinSymbol *r_bin_file_add_method(RBinFile *bf, const char *klass, const c
|
||||
sym->lang = lang;
|
||||
char *name = r_str_newf ("%s::%s", klass, method);
|
||||
ht_pp_insert (bf->o->methods_ht, name, sym);
|
||||
// RBinSymbol *dsym = r_bin_symbol_clone (sym);
|
||||
r_list_append (c->methods, sym);
|
||||
free (name);
|
||||
}
|
||||
|
@ -88,6 +88,22 @@ static char *swiftField(const char *dn, const char *cn) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// R2_590 - move into rbin as public api
|
||||
static RBinSymbol *r_bin_symbol_clone(RBinSymbol *bs) {
|
||||
RBinSymbol *nbs = R_NEW (RBinSymbol);
|
||||
memcpy (nbs, bs, sizeof (RBinSymbol));
|
||||
nbs->name = strdup (nbs->name);
|
||||
if (nbs->dname) {
|
||||
nbs->dname = strdup (nbs->dname);
|
||||
}
|
||||
if (nbs->libname) {
|
||||
nbs->libname = strdup (nbs->libname);
|
||||
}
|
||||
if (nbs->classname) {
|
||||
nbs->classname = strdup (nbs->classname);
|
||||
}
|
||||
return nbs;
|
||||
}
|
||||
static RList *classes_from_symbols(RBinFile *bf) {
|
||||
RBinSymbol *sym;
|
||||
RListIter *iter;
|
||||
@ -113,7 +129,8 @@ static RList *classes_from_symbols(RBinFile *bf) {
|
||||
if (!mn) {
|
||||
mn = strstr (dn, cn);
|
||||
if (mn && mn[strlen (cn)] == '.') {
|
||||
r_list_append (c->methods, sym);
|
||||
RBinSymbol *dsym = r_bin_symbol_clone (sym);
|
||||
r_list_append (c->methods, dsym);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -15,3 +15,9 @@ git grep 'sprintf (' libr | wc -l
|
||||
|
||||
printf -- "eUsage\t"
|
||||
git grep 'eprintf (' libr | grep Usage | wc -l
|
||||
|
||||
printf -- "f(char)\t"
|
||||
git grep 'free ((char' libr | wc -l
|
||||
|
||||
printf -- "f(void)\t"
|
||||
git grep 'free ((void' libr | wc -l
|
||||
|
Loading…
Reference in New Issue
Block a user