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";