diff --git a/src/shared/inc/prettyprintshared.h b/src/shared/inc/prettyprintshared.h index deb3a90c87..d94f75d1e1 100644 --- a/src/shared/inc/prettyprintshared.h +++ b/src/shared/inc/prettyprintshared.h @@ -119,14 +119,20 @@ inline void PrettyPrint(std::stringstream& Out, const T& Value) } else if constexpr (std::is_same_v) { - if (Value.Index <= 0) + if (Value.Index == 0) { Out << ""; return; } - gsl::span span(Value.MessageHead + Value.Index, Value.MessageHead + Value.MessageSize); - Out << wsl::shared::string::Join(wsl::shared::string::ArrayFromSpan(gsl::as_bytes(span)), ','); + if (Value.Index >= Value.MessageSize) + { + Out << ""; + return; + } + + gsl::span span(Value.MessageHead, Value.MessageSize); + Out << wsl::shared::string::Join(wsl::shared::string::ArrayFromSpan(gsl::as_bytes(span), Value.Index), ','); } else { diff --git a/test/windows/UnitTests.cpp b/test/windows/UnitTests.cpp index 84c57627cc..f27b5931fd 100644 --- a/test/windows/UnitTests.cpp +++ b/test/windows/UnitTests.cpp @@ -8296,6 +8296,31 @@ Distribution successfully installed. It can be launched via 'wsl.exe -d ubuntu-d VERIFY_ARE_EQUAL(expected, output); } + + { + wsl::shared::MessageWriter message; + + const auto verifyEntries = [&](std::string_view entries) { + const auto expected = std::format( + "Header = {{MessageType = LxMessageWSLCListDirResult\n" + "MessageSize = {}\n" + "TransactionId = 0\n" + "TransactionStep = 0\n" + "}}\n" + "Result = 0\n" + "EntriesIndex = {}\n", + message->Header.MessageSize, + entries); + + VERIFY_ARE_EQUAL(expected, message->PrettyPrint()); + }; + + message->EntriesIndex = message->Header.MessageSize + 0x1000; + verifyEntries(""); + + message->EntriesIndex = 0; + verifyEntries(""); + } } }; } // namespace UnitTests