mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-17 00:27:31 +00:00
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:
parent
de44e16474
commit
6bed5ca433
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user