From 73aede6052bacaffa9ab123a205fbd8ac34a9df8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Sun, 23 Oct 2016 22:27:44 +0200 Subject: [PATCH] Fix memory leak in TrackDesignRepository --- src/core/IStream.cpp | 15 +++++++++++++++ src/core/IStream.hpp | 1 + src/ride/TrackDesignRepository.cpp | 6 +++--- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/core/IStream.cpp b/src/core/IStream.cpp index b4260fb853..423b41df59 100644 --- a/src/core/IStream.cpp +++ b/src/core/IStream.cpp @@ -35,6 +35,21 @@ utf8 * IStream::ReadString() return resultString; } +std::string IStream::ReadStdString() +{ + std::vector result; + + uint8 ch; + while ((ch = ReadValue()) != 0) + { + result.push_back(ch); + } + result.push_back(0); + + std::string resultString(result.data(), result.data() + result.size()); + return resultString; +} + void IStream::WriteString(const utf8 * str) { if (str == nullptr) diff --git a/src/core/IStream.hpp b/src/core/IStream.hpp index 6666a693ac..ac49112b46 100644 --- a/src/core/IStream.hpp +++ b/src/core/IStream.hpp @@ -107,6 +107,7 @@ interface IStream } utf8 * ReadString(); + std::string ReadStdString(); void WriteString(const utf8 * str); void WriteString(const std::string &string); }; diff --git a/src/ride/TrackDesignRepository.cpp b/src/ride/TrackDesignRepository.cpp index 7e42110be2..28238be952 100644 --- a/src/ride/TrackDesignRepository.cpp +++ b/src/ride/TrackDesignRepository.cpp @@ -284,10 +284,10 @@ private: for (uint32 i = 0; i < header.NumItems; i++) { TrackRepositoryItem item; - item.Name = fs.ReadString(); - item.Path = fs.ReadString(); + item.Name = fs.ReadStdString(); + item.Path = fs.ReadStdString(); item.RideType = fs.ReadValue(); - item.ObjectEntry = fs.ReadString(); + item.ObjectEntry = fs.ReadStdString(); item.Flags = fs.ReadValue(); _items.push_back(item); }