From 75c12a919413d150207b50f51cb3f68005f477de Mon Sep 17 00:00:00 2001 From: condret Date: Fri, 11 Aug 2017 21:53:02 +0000 Subject: [PATCH 1/2] fix segfault on oo+ --- libr/io/section.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/libr/io/section.c b/libr/io/section.c index 25d56a3409d91..8cec8e36b44d0 100644 --- a/libr/io/section.c +++ b/libr/io/section.c @@ -565,18 +565,24 @@ R_API bool r_io_section_apply(RIO *io, ut32 id, RIOSectionApplyMethod method) { static bool _section_reapply_anal_or_patch(RIO *io, RIOSection *sec, RIOSectionApplyMethod method) { SdbListIter *iter; RIOMap *map; + RIODesc* desc; + return false; if (!sec) { return false; } if (sec->memmap) { ls_foreach (io->maps, iter, map) { if (map->id == sec->memmap) { - r_io_close (io, map->fd); + desc = r_io_desc_get (io, map->fd); + if (desc && desc->plugin && desc->plugin->close) { //we can't use r_io_close here, bc it breaks the section-list + desc->plugin->close (desc); + r_io_desc_del (io, map->fd); + } + sec->memmap = 0; + r_io_map_cleanup (io); break; } } - r_io_map_del (io, sec->memmap); - sec->memmap = 0; } r_io_map_del (io, sec->filemap); sec->filemap = 0; @@ -725,12 +731,12 @@ R_API bool r_io_section_reapply(RIO *io, ut32 id, RIOSectionApplyMethod method) R_API bool r_io_section_reapply_bin(RIO *io, ut32 binid, RIOSectionApplyMethod method) { RIOSection *sec; - SdbListIter *iter; + SdbListIter *iter, *ator; bool ret = false; if (!io || !io->sections) { return false; } - ls_foreach (io->sections, iter, sec) { + ls_foreach_safe (io->sections, iter, ator, sec) { if (sec && (sec->bin_id == binid)) { ret = true; _section_reapply (io, sec, method); From e79e7d17a5b34f1da27386d57ea5f564a5dd032e Mon Sep 17 00:00:00 2001 From: condret Date: Tue, 15 Aug 2017 00:22:54 +0000 Subject: [PATCH 2/2] fix section-reapply --- libr/io/section.c | 1 - 1 file changed, 1 deletion(-) diff --git a/libr/io/section.c b/libr/io/section.c index 8cec8e36b44d0..e7f3a81a9d3aa 100644 --- a/libr/io/section.c +++ b/libr/io/section.c @@ -566,7 +566,6 @@ static bool _section_reapply_anal_or_patch(RIO *io, RIOSection *sec, RIOSectionA SdbListIter *iter; RIOMap *map; RIODesc* desc; - return false; if (!sec) { return false; }