From 8894be6a6dc94ba6a323ea5a123bbb597ba481b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Sun, 23 Oct 2016 22:13:17 +0200 Subject: [PATCH 1/4] Tie _tooltipText size to that of gCommonStringFormatBuffer --- src/windows/tooltip.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/windows/tooltip.c b/src/windows/tooltip.c index e2232a6c38..eb1b35f778 100644 --- a/src/windows/tooltip.c +++ b/src/windows/tooltip.c @@ -64,7 +64,7 @@ static rct_window_event_list window_tooltip_events = { NULL }; -static utf8 _tooltipText[512]; +static utf8 _tooltipText[sizeof(gCommonStringFormatBuffer)]; static sint16 _tooltipNumLines; void window_tooltip_reset(int x, int y) From a75c1f1bc413a109531160bd6ddb4e5a31aa86ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Sun, 23 Oct 2016 22:27:15 +0200 Subject: [PATCH 2/4] Fix memory leak in FileScanner --- src/core/FileScanner.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/core/FileScanner.cpp b/src/core/FileScanner.cpp index 58585dd19e..9b2dbc171c 100644 --- a/src/core/FileScanner.cpp +++ b/src/core/FileScanner.cpp @@ -311,7 +311,9 @@ protected: DirectoryChild child = CreateChild(path, node); children.push_back(child); } + free(namelist[i]); } + free(namelist); } } 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 3/4] 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); } From 6c4ff285b461aa941f0c14b6facca17f055b7fa9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Sun, 23 Oct 2016 22:57:37 +0200 Subject: [PATCH 4/4] Fix memory leak in FileScanner --- src/core/FileScanner.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/core/FileScanner.cpp b/src/core/FileScanner.cpp index 9b2dbc171c..7e20b7895c 100644 --- a/src/core/FileScanner.cpp +++ b/src/core/FileScanner.cpp @@ -101,7 +101,11 @@ public: ~FileScannerBase() override { Memory::Free(_rootPath); - Memory::FreeArray(_patterns, _numPatterns); + for (size_t i = 0; i < _numPatterns; i++) + { + Memory::Free(_patterns[i]); + } + Memory::Free(_patterns); Memory::Free(_currentPath); Memory::Free(_currentFileInfo); }