From e0220fb23d7a1a52b3925f3fcba8e77d4f5abfc6 Mon Sep 17 00:00:00 2001 From: Gabriel Corona Date: Tue, 19 May 2015 10:23:31 +0200 Subject: [PATCH] [mc] Fix bug in Snapshot::read_bytes MC_region_read is allowed to return a pointer to another buffer containing the data. We have to handle this case. --- src/mc/mc_snapshot.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/mc/mc_snapshot.cpp b/src/mc/mc_snapshot.cpp index 345e23b23d..cd0ffaad6e 100644 --- a/src/mc/mc_snapshot.cpp +++ b/src/mc/mc_snapshot.cpp @@ -187,8 +187,15 @@ const void* Snapshot::read_bytes(void* buffer, std::size_t size, AddressSpace::ReadMode mode) { mc_mem_region_t region = mc_get_snapshot_region((void*)address, this, process_index); - if (region) - return MC_region_read(region, buffer, (void*)address, size); + if (region) { + const void* res = MC_region_read(region, buffer, (void*)address, size); + if (buffer == res || mode == AddressSpace::Lazy) + return res; + else { + memcpy(buffer, res, size); + return buffer; + } + } else return MC_process_read(this->process, mode, buffer, (void*)address, size, process_index); } -- 2.20.1