diff options
-rw-r--r-- | lib/System/Win32/Path.inc | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/System/Win32/Path.inc b/lib/System/Win32/Path.inc index 4a6dbd3..2dbf13e 100644 --- a/lib/System/Win32/Path.inc +++ b/lib/System/Win32/Path.inc @@ -64,6 +64,13 @@ Path::operator=(StringRef that) { return *this; } +// push_back 0 on create, and pop_back on delete. +struct ScopedNullTerminator { + std::string &str; + ScopedNullTerminator(std::string &s) : str(s) { str.push_back(0); } + ~ScopedNullTerminator() { str.pop_back(); } +}; + bool Path::isValid() const { if (path.empty()) @@ -72,6 +79,8 @@ Path::isValid() const { // If there is a colon, it must be the second character, preceded by a letter // and followed by something. size_t len = path.size(); + // This code assumes that path is null terminated, so make sure it is. + ScopedNullTerminator snt(path); size_t pos = path.rfind(':',len); size_t rootslash = 0; if (pos != std::string::npos) { |