From e615943f9801a354a20a2e048d7d21247ca8b2f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=80=D0=B0=D0=BD=D0=B8=D0=BC=D0=B8=D1=80=20=D0=9A?= =?UTF-8?q?=D0=B0=D1=80=D0=B0=D1=9F=D0=B8=D1=9B?= Date: Fri, 19 Apr 2024 10:22:28 -0700 Subject: [PATCH] Fixed bx::writeRep infinite loop on error. --- include/bx/inline/readerwriter.inl | 2 +- tests/readerwriter_test.cpp | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/include/bx/inline/readerwriter.inl b/include/bx/inline/readerwriter.inl index 4d3148d..dd5cef2 100644 --- a/include/bx/inline/readerwriter.inl +++ b/include/bx/inline/readerwriter.inl @@ -308,7 +308,7 @@ namespace bx memSet(temp, _byte, blockSize); int32_t size = 0; - while (0 < _size) + while (0 < _size && _err->isOk() ) { int32_t bytes = write(_writer, temp, uint32_min(blockSize, _size), _err); size += bytes; diff --git a/tests/readerwriter_test.cpp b/tests/readerwriter_test.cpp index 3ee8fe4..766bbdd 100644 --- a/tests/readerwriter_test.cpp +++ b/tests/readerwriter_test.cpp @@ -29,3 +29,27 @@ TEST_CASE("writeBE", "") REQUIRE(err.isOk() ); REQUIRE(total == 4); } + +TEST_CASE("writeRep", "") +{ + uint8_t tmp[1389]; + bx::StaticMemoryBlock mb(tmp, sizeof(tmp) ); + bx::MemoryWriter writer(&mb); + + bx::Error err; + + int32_t total = 0; + + total += bx::writeRep(&writer, 0xfb, BX_COUNTOF(tmp)-1, &err); + REQUIRE(err.isOk() ); + REQUIRE(BX_COUNTOF(tmp)-1 == total); + + total += bx::writeRep(&writer, 0xfb, 2, &err); + REQUIRE(!err.isOk() ); + REQUIRE(BX_COUNTOF(tmp) == total); + + for (uint32_t ii = 0; ii < BX_COUNTOF(tmp); ++ii) + { + REQUIRE(0xfb == tmp[ii]); + } +}