diff --git a/librz/bin/bin_demangle.c b/librz/bin/bin_demangle.c index 9f93fa69c9..127a3c9868 100644 --- a/librz/bin/bin_demangle.c +++ b/librz/bin/bin_demangle.c @@ -20,7 +20,7 @@ } while (0) static const char *get_mangled_name(const char *mangled) { - if (!strncmp(mangled, "__OBJC_$", strlen("__OBJC_$"))) { + if (!mangled || !strncmp(mangled, "__OBJC_$", strlen("__OBJC_$"))) { // this is never a mangled name return NULL; } diff --git a/librz/bin/bobj.c b/librz/bin/bobj.c index 04d4d0a4b9..fcc30f0816 100644 --- a/librz/bin/bobj.c +++ b/librz/bin/bobj.c @@ -201,6 +201,7 @@ RZ_IPI void rz_bin_object_free(RzBinObject *o) { rz_list_free(o->sections); rz_list_free(o->symbols); rz_list_free(o->vfiles); + rz_list_free(o->resources); for (ut32 i = 0; i < RZ_BIN_SPECIAL_SYMBOL_LAST; i++) { free(o->binsym[i]); } diff --git a/librz/bin/bobj_process_class.c b/librz/bin/bobj_process_class.c index 8f8882fdf9..51d783831a 100644 --- a/librz/bin/bobj_process_class.c +++ b/librz/bin/bobj_process_class.c @@ -35,6 +35,9 @@ static void process_class_field(RzBinObject *o, RzBinClassField *field) { } static void process_handle_class(RzBinObject *o, RzBinClass *klass) { + if (!klass->name) { + klass->name = rz_str_new("unknown_class"); + } RzBinClass *found = ht_pp_find(o->name_to_class_object, klass->name, NULL); if (!found) { ht_pp_insert(o->name_to_class_object, klass->name, klass); diff --git a/librz/bin/bobj_process_file.c b/librz/bin/bobj_process_file.c index 77fcc3562b..3e437359ab 100644 --- a/librz/bin/bobj_process_file.c +++ b/librz/bin/bobj_process_file.c @@ -58,7 +58,7 @@ RZ_IPI void rz_bin_set_and_process_file(RzBinFile *bf, RzBinObject *o) { sdb_free(o->kv); if (!plugin->get_sdb || !(o->kv = plugin->get_sdb(bf))) { - o->kv = NULL; + o->kv = sdb_new0(); } rz_list_free(o->mem); diff --git a/librz/bin/bobj_process_import.c b/librz/bin/bobj_process_import.c index 61a98c82a5..7df80bd835 100644 --- a/librz/bin/bobj_process_import.c +++ b/librz/bin/bobj_process_import.c @@ -49,6 +49,10 @@ RZ_IPI void rz_bin_process_imports(RzBinFile *bf, RzBinObject *o, const RzDemang RzListIter *it; RzBinImport *element; rz_list_foreach (o->imports, it, element) { + if (!element->name) { + continue; + } + // demangle the import if (!rz_bin_demangle_import(element, demangler) || !language_cb) { diff --git a/librz/bin/bobj_process_symbol.c b/librz/bin/bobj_process_symbol.c index 28e5c5ce0e..2b1d4a70d6 100644 --- a/librz/bin/bobj_process_symbol.c +++ b/librz/bin/bobj_process_symbol.c @@ -66,6 +66,10 @@ static void process_handle_symbol(RzBinSymbol *symbol, RzBinObject *o, const RzD // rebase physical address symbol->paddr += o->opts.loadaddr; + if (!symbol->name) { + return; + } + // add symbol to the 'import' map[name]symbol if (symbol->is_imported && RZ_STR_ISNOTEMPTY(symbol->name)) { if (!ht_pp_find(o->import_name_symbols, symbol->name, NULL)) {