1. Fix bug in getBaseName where it mishandles suffixes
authorJeff Cohen <jeffc@jolt-lang.org>
Sat, 9 Jul 2005 18:42:02 +0000 (18:42 +0000)
committerJeff Cohen <jeffc@jolt-lang.org>
Sat, 9 Jul 2005 18:42:02 +0000 (18:42 +0000)
2. Fix bug in eraseSuffix where it allows /path/.suffix to become /path/

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22362 91177308-0d34-0410-b5e6-96231b3b80d8

lib/System/Unix/Path.inc

index 3f2e90e9d36e6b8c728fe2894a27ad5a09782849..9d5e7fa9100f4503e0a626d43b12fb64204e8dd6 100644 (file)
@@ -271,7 +271,11 @@ Path::getBasename() const {
   else
     slash++;
 
-  return path.substr(slash, path.rfind('.'));
+  size_t dot = path.rfind('.');
+  if (dot == std::string::npos || dot < slash)
+    return path.substr(slash);
+  else
+    return path.substr(slash, dot - slash);
 }
 
 bool Path::hasMagicNumber(const std::string &Magic) const {
@@ -521,7 +525,7 @@ Path::eraseSuffix() {
   size_t dotpos = path.rfind('.',path.size());
   size_t slashpos = path.rfind('/',path.size());
   if (dotpos != std::string::npos) {
-    if (slashpos == std::string::npos || dotpos > slashpos) {
+    if (slashpos == std::string::npos || dotpos > slashpos+1) {
       path.erase(dotpos, path.size()-dotpos);
       return true;
     }