From 611186db9e736ac67d4aa62b52161ed75877fef8 Mon Sep 17 00:00:00 2001 From: fallenoak Date: Mon, 16 Nov 2020 17:54:56 -0600 Subject: [PATCH] fix(string): correctly handle not found case in SStrStr --- storm/String.cpp | 6 +++++- test/String.cpp | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/storm/String.cpp b/storm/String.cpp index 459ac52..5f01cec 100644 --- a/storm/String.cpp +++ b/storm/String.cpp @@ -234,8 +234,12 @@ const char* SStrStr(const char* string, const char* search) { return nullptr; } - while (*substring && SStrCmp(substring, search, length)) { + while (SStrCmp(substring, search, length)) { substring++; + + if (!*substring) { + return nullptr; + } } return substring; diff --git a/test/String.cpp b/test/String.cpp index dd823b1..2c5fb55 100644 --- a/test/String.cpp +++ b/test/String.cpp @@ -91,6 +91,20 @@ TEST_CASE("SStrStr", "[string]") { REQUIRE(!SStrCmp(search, substring, SStrLen(search))); } + SECTION("finds substring when search is empty") { + auto string = "foobar"; + auto search = ""; + auto substring = SStrStr(string, search); + REQUIRE(!SStrCmp(string, substring, SStrLen(string))); + } + + SECTION("returns nullptr when search does not exist in string") { + auto string = "foobar"; + auto search = "xyzzy"; + auto substring = SStrStr(string, search); + REQUIRE(substring == nullptr); + } + SECTION("returns nullptr when given empty string") { auto string = ""; auto search = "bar";