From 95dc7640984ccf7c5c3e3e5087733a33d7496a17 Mon Sep 17 00:00:00 2001 From: Mike Date: Mon, 17 Jan 2022 10:22:37 +0000 Subject: [PATCH] Fix stack-smashing bug in IDataSourceStream::readString() (#2468) * Fix stack-smashing bug in IDataSourceStream::readString() * Add test case --- Sming/Core/Data/Stream/DataSourceStream.cpp | 2 +- tests/HostTests/modules/Stream.cpp | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Sming/Core/Data/Stream/DataSourceStream.cpp b/Sming/Core/Data/Stream/DataSourceStream.cpp index 4a7e0e41bd..bbab048c30 100644 --- a/Sming/Core/Data/Stream/DataSourceStream.cpp +++ b/Sming/Core/Data/Stream/DataSourceStream.cpp @@ -45,7 +45,7 @@ String IDataSourceStream::readString(size_t maxLen) size_t remain = maxLen; while(remain != 0) { char buffer[256]; - size_t len = readBytes(buffer, remain); + size_t len = readBytes(buffer, std::min(sizeof(buffer), remain)); if(len == 0) { break; } diff --git a/tests/HostTests/modules/Stream.cpp b/tests/HostTests/modules/Stream.cpp index 65782a1030..0f52776c96 100644 --- a/tests/HostTests/modules/Stream.cpp +++ b/tests/HostTests/modules/Stream.cpp @@ -83,6 +83,13 @@ class StreamTest : public TestGroup REQUIRE(strlen(s.c_str()) == s.length()); } + TEST_CASE("readString (PR #2468)") + { + FSTR::Stream stream(FS_abstract); + String s = stream.readString(0x10000); + REQUIRE(s == FS_abstract); + } + #ifndef DISABLE_NETWORK TEST_CASE("ChunkedStream / StreamTransformer")