From 36136bde5cb4eac3655409e1dfd661b743f82ecf Mon Sep 17 00:00:00 2001 From: Alexander Borsuk Date: Thu, 9 May 2024 22:31:16 +0200 Subject: [PATCH] Fixed memory access past the end of the vector data Log printing uses charPtr as char const *, assuming that it's a null-terminated string. But it's a vector. Signed-off-by: Alexander Borsuk --- map/bookmark_manager.cpp | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/map/bookmark_manager.cpp b/map/bookmark_manager.cpp index 9a0a49ec8b..dc2d370439 100644 --- a/map/bookmark_manager.cpp +++ b/map/bookmark_manager.cpp @@ -16,6 +16,7 @@ #include "geometry/mercator.hpp" +#include "coding/file_reader.hpp" #include "coding/file_writer.hpp" #include "coding/internal/file_data.hpp" #include "coding/serdes_json.hpp" @@ -1865,20 +1866,16 @@ void BookmarkManager::LoadMetadata() return; Metadata metadata; - std::vector jsonStr; - - auto const charPtr = [&jsonStr]() - { - return reinterpret_cast(jsonStr.data()); - }; + std::string json; try { - jsonStr = base::ReadFile(metadataFilePath); - if (jsonStr.empty()) + FileReader(metadataFilePath).ReadAsString(json); + + if (json.empty()) return; - coding::DeserializerJson des(charPtr()); + coding::DeserializerJson des(json); des(metadata); } catch (FileReader::Exception const & exception) @@ -1888,8 +1885,7 @@ void BookmarkManager::LoadMetadata() } catch (base::Json::Exception const & exception) { - LOG(LWARNING, ("Exception while parsing file:", metadataFilePath, "reason:", exception.what(), - "json:", charPtr())); + LOG(LWARNING, ("Exception while parsing file:", metadataFilePath, "reason:", exception.what(), "json:", json)); return; }