From 7c98ecefd7344f00383f0d0f6112f190680983f3 Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Mon, 26 Jun 2023 11:57:17 +0200 Subject: [PATCH] Don't call data() on read-only mapped_file --- src/dwarfs/mmap.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/dwarfs/mmap.cpp b/src/dwarfs/mmap.cpp index e1e1f1d9..0b36d741 100644 --- a/src/dwarfs/mmap.cpp +++ b/src/dwarfs/mmap.cpp @@ -54,12 +54,14 @@ std::error_code mmap::lock(file_off_t offset [[maybe_unused]], size_t size [[maybe_unused]]) { std::error_code ec; + auto data = mf_.const_data() + offset; + #ifdef _WIN32 - if (::VirtualLock(mf_.data() + offset, size) == 0) { + if (::VirtualLock(const_cast(data), size) == 0) { ec.assign(::GetLastError(), std::system_category()); } #else - if (::mlock(mf_.const_data() + offset, size) != 0) { + if (::mlock(data, size) != 0) { ec.assign(errno, std::generic_category()); } #endif @@ -77,12 +79,14 @@ std::error_code mmap::release(file_off_t offset [[maybe_unused]], size += misalign; size -= size % page_size_; + auto data = const_cast(mf_.const_data() + offset); + #ifdef _WIN32 - if (::VirtualFree(mf_.data() + offset, size, MEM_DECOMMIT) == 0) { + if (::VirtualFree(data, size, MEM_DECOMMIT) == 0) { ec.assign(::GetLastError(), std::system_category()); } #else - if (::madvise(mf_.data() + offset, size, MADV_DONTNEED) != 0) { + if (::madvise(data, size, MADV_DONTNEED) != 0) { ec.assign(errno, std::generic_category()); } #endif @@ -95,12 +99,14 @@ std::error_code mmap::release_until(file_off_t offset [[maybe_unused]]) { offset -= offset % page_size_; + auto data = const_cast(mf_.const_data()); + #ifdef _WIN32 - if (::VirtualFree(mf_.data(), offset, MEM_DECOMMIT) == 0) { + if (::VirtualFree(data, offset, MEM_DECOMMIT) == 0) { ec.assign(::GetLastError(), std::system_category()); } #else - if (::madvise(mf_.data(), offset, MADV_DONTNEED) != 0) { + if (::madvise(data, offset, MADV_DONTNEED) != 0) { ec.assign(errno, std::generic_category()); } #endif