summaryrefslogtreecommitdiff
path: root/src/plugins/filesystem/FileLocator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/filesystem/FileLocator.cpp')
-rw-r--r--src/plugins/filesystem/FileLocator.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/plugins/filesystem/FileLocator.cpp b/src/plugins/filesystem/FileLocator.cpp
index 467363b..6804c6d 100644
--- a/src/plugins/filesystem/FileLocator.cpp
+++ b/src/plugins/filesystem/FileLocator.cpp
@@ -131,7 +131,7 @@ bool FileLocator::doLocate(Resource &resource, const std::string &path,
base /= path;
// If we already found a fitting resource there, use that.
- if (fs::exists(base)) {
+ if (fs::exists(base) && fs::is_file(base)) {
std::string location = fs::canonical(base).generic_string();
#ifdef FILELOCATOR_DEBUG_PRINT
std::cout << "FileLocator: Found \"" << path << "\" at "
@@ -143,6 +143,11 @@ bool FileLocator::doLocate(Resource &resource, const std::string &path,
}
}
+ // If the path starts with "./" or "../" only perform relative lookups!
+ if (path.substr(0, 2) == "./" || path.substr(0, 3) == "../") {
+ return false;
+ }
+
// Otherwise look in the search paths, search backwards, last defined search
// paths have a higher precedence
auto it = searchPaths.find(type);
@@ -154,7 +159,7 @@ bool FileLocator::doLocate(Resource &resource, const std::string &path,
#endif
fs::path p{*it};
p /= path;
- if (fs::exists(p)) {
+ if (fs::exists(p) && fs::is_file(p)) {
std::string location = fs::canonical(p).generic_string();
#ifdef FILELOCATOR_DEBUG_PRINT
std::cout << "FileLocator: Found \"" << path << "\" in "