Commit cda9ed44 authored by Alexander Alekhin's avatar Alexander Alekhin

fix some functions for valid processing of empty string content (cstr_==0, len_==0)

parent aed9f5d5
...@@ -896,6 +896,7 @@ size_t String::find_first_of(const String& str, size_t pos) const ...@@ -896,6 +896,7 @@ size_t String::find_first_of(const String& str, size_t pos) const
inline inline
size_t String::find_first_of(const char* s, size_t pos) const size_t String::find_first_of(const char* s, size_t pos) const
{ {
if (len_ == 0) return npos;
if (pos >= len_ || !s[0]) return npos; if (pos >= len_ || !s[0]) return npos;
const char* lmax = cstr_ + len_; const char* lmax = cstr_ + len_;
for (const char* i = cstr_ + pos; i < lmax; ++i) for (const char* i = cstr_ + pos; i < lmax; ++i)
...@@ -910,6 +911,7 @@ size_t String::find_first_of(const char* s, size_t pos) const ...@@ -910,6 +911,7 @@ size_t String::find_first_of(const char* s, size_t pos) const
inline inline
size_t String::find_last_of(const char* s, size_t pos, size_t n) const size_t String::find_last_of(const char* s, size_t pos, size_t n) const
{ {
if (len_ == 0) return npos;
if (pos >= len_) pos = len_ - 1; if (pos >= len_) pos = len_ - 1;
for (const char* i = cstr_ + pos; i >= cstr_; --i) for (const char* i = cstr_ + pos; i >= cstr_; --i)
{ {
...@@ -935,6 +937,7 @@ size_t String::find_last_of(const String& str, size_t pos) const ...@@ -935,6 +937,7 @@ size_t String::find_last_of(const String& str, size_t pos) const
inline inline
size_t String::find_last_of(const char* s, size_t pos) const size_t String::find_last_of(const char* s, size_t pos) const
{ {
if (len_ == 0) return npos;
if (pos >= len_) pos = len_ - 1; if (pos >= len_) pos = len_ - 1;
for (const char* i = cstr_ + pos; i >= cstr_; --i) for (const char* i = cstr_ + pos; i >= cstr_; --i)
{ {
......
...@@ -129,3 +129,12 @@ TEST(Core_OutputArrayAssign, _Matxf_UMatd) ...@@ -129,3 +129,12 @@ TEST(Core_OutputArrayAssign, _Matxf_UMatd)
EXPECT_LE(maxAbsDiff(expected, actual), FLT_EPSILON); EXPECT_LE(maxAbsDiff(expected, actual), FLT_EPSILON);
} }
TEST(Core_String, find_last_of__with__empty_string)
{
cv::String s;
size_t p = s.find_last_of("q", 0);
// npos is not exported: EXPECT_EQ(cv::String::npos, p);
EXPECT_EQ(std::string::npos, p);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment