From b8c9a30d7a507478843f92bc12d7175f9ee2c1a0 Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 22 May 2020 23:09:07 +0100 Subject: [PATCH] Fix broken trim function if only one character was left after whitespace --- renderdoc/api/replay/rdcstr.h | 10 +++++----- renderdoc/replay/basic_types_tests.cpp | 7 +++++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/renderdoc/api/replay/rdcstr.h b/renderdoc/api/replay/rdcstr.h index 92f7aebb0..c56606929 100644 --- a/renderdoc/api/replay/rdcstr.h +++ b/renderdoc/api/replay/rdcstr.h @@ -819,17 +819,17 @@ public: while(start < sz && IS_WHITESPACE(str[start])) start++; - size_t end = sz - 1; - while(end > start && IS_WHITESPACE(str[end])) - end--; - // no non-whitespace characters, become the empty string - if(start >= end) + if(start == sz) { clear(); return; } + size_t end = sz - 1; + while(end > start && IS_WHITESPACE(str[end])) + end--; + erase(end + 1, ~0U); erase(0, start); } diff --git a/renderdoc/replay/basic_types_tests.cpp b/renderdoc/replay/basic_types_tests.cpp index 36680d61d..9980541a6 100644 --- a/renderdoc/replay/basic_types_tests.cpp +++ b/renderdoc/replay/basic_types_tests.cpp @@ -1161,6 +1161,13 @@ TEST_CASE("Test string type", "[basictypes][string]") CHECK(rdcstr(" Foo\nbar").trimmed() == "Foo\nbar"); CHECK(rdcstr("FOO BAR ").trimmed() == "FOO BAR"); CHECK(rdcstr("FOO BAR \t\n").trimmed() == "FOO BAR"); + CHECK(rdcstr("1").trimmed() == "1"); + CHECK(rdcstr(" 1 ").trimmed() == "1"); + CHECK(rdcstr(" 1").trimmed() == "1"); + CHECK(rdcstr("1 ").trimmed() == "1"); + CHECK(rdcstr("1\n ").trimmed() == "1"); + CHECK(rdcstr("\n1\n ").trimmed() == "1"); + CHECK(rdcstr(" \n\t1\n ").trimmed() == "1"); CHECK(rdcstr("").trimmed() == ""); CHECK(rdcstr(" ").trimmed() == ""); CHECK(rdcstr(" \t \n ").trimmed() == "");