Two changes:

1. Use isValid() to check validity of the resulting path name in the
   eraseSuffix even though we can't think of a case where eraseSuffix could
   possibly cause an invalid path name.
2. Rewrite isValid() to not use the deprecated realpath function any more.
   It now just uses isascii to make sure all the characters are legit.

llvm-svn: 22359
This commit is contained in:
Reid Spencer 2005-07-08 06:53:26 +00:00
parent 748de6e248
commit d28e432c36
1 changed files with 11 additions and 7 deletions

View File

@ -68,17 +68,18 @@ Path::Path(const std::string& unverified_path) : path(unverified_path) {
bool
Path::isValid() const {
// Check some obvious things
if (path.empty())
return false;
else if (path.length() >= MAXPATHLEN)
return false;
#if defined(HAVE_REALPATH)
char pathname[MAXPATHLEN];
if (0 == realpath(path.c_str(), pathname))
if (errno != EACCES && errno != EIO && errno != ENOENT && errno != ENOTDIR)
return false;
#endif
return true;
// Check that the characters are ascii chars
size_t len = path.length();
unsigned i = 0;
while (i < len && isascii(path[i]))
++i;
return i >= len;
}
Path
@ -504,6 +505,7 @@ Path::appendSuffix(const std::string& suffix) {
bool
Path::eraseSuffix() {
std::string save = path;
size_t dotpos = path.rfind('.',path.size());
size_t slashpos = path.rfind('/',path.size());
if (dotpos != std::string::npos) {
@ -512,6 +514,8 @@ Path::eraseSuffix() {
return true;
}
}
if (!isValid())
path = save;
return false;
}