summaryrefslogtreecommitdiff
path: root/src/mongo/base/string_data.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/base/string_data.h')
-rw-r--r--src/mongo/base/string_data.h9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/mongo/base/string_data.h b/src/mongo/base/string_data.h
index 7d896e7ecaf..f05bdfb8ca3 100644
--- a/src/mongo/base/string_data.h
+++ b/src/mongo/base/string_data.h
@@ -140,7 +140,7 @@ public:
//
size_t find(char c, size_t fromPos = 0) const;
- size_t find(StringData needle) const;
+ size_t find(StringData needle, size_t fromPos = 0) const;
size_t rfind(char c, size_t fromPos = std::string::npos) const;
/**
@@ -278,7 +278,7 @@ inline size_t StringData::find(char c, size_t fromPos) const {
return static_cast<size_t>(static_cast<const char*>(x) - _data);
}
-inline size_t StringData::find(StringData needle) const {
+inline size_t StringData::find(StringData needle, size_t fromPos) const {
size_t mx = size();
size_t needleSize = needle.size();
@@ -287,9 +287,12 @@ inline size_t StringData::find(StringData needle) const {
else if (needleSize > mx)
return std::string::npos;
+ if (fromPos > size())
+ return std::string::npos;
+
mx -= needleSize;
- for (size_t i = 0; i <= mx; i++) {
+ for (size_t i = fromPos; i <= mx; i++) {
if (memcmp(_data + i, needle._data, needleSize) == 0)
return i;
}