diff options
Diffstat (limited to 'src/plugins/filesystem')
| -rw-r--r-- | src/plugins/filesystem/FileLocator.cpp | 9 | 
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 "  | 
