Core/VirtualDirectory: Prevent storing . and .. entries

This commit is contained in:
Lynix
2022-05-16 21:32:59 +02:00
parent 52f822fbcb
commit 0e82c2893a

View File

@@ -214,6 +214,9 @@ namespace Nz
if (!CreateOrRetrieveDirectory(path, dir, entryName)) if (!CreateOrRetrieveDirectory(path, dir, entryName))
throw std::runtime_error("invalid path"); throw std::runtime_error("invalid path");
if (entryName == "." || entryName == "..")
throw std::runtime_error("invalid entry name");
return dir->StoreInternal(std::string(entryName), DirectoryEntry{ std::move(directory) }); return dir->StoreInternal(std::string(entryName), DirectoryEntry{ std::move(directory) });
} }
@@ -226,6 +229,9 @@ namespace Nz
if (!CreateOrRetrieveDirectory(path, dir, entryName)) if (!CreateOrRetrieveDirectory(path, dir, entryName))
throw std::runtime_error("invalid path"); throw std::runtime_error("invalid path");
if (entryName == "." || entryName == "..")
throw std::runtime_error("invalid entry name");
return dir->StoreInternal(std::string(entryName), PhysicalDirectoryEntry{ std::move(directoryPath) }); return dir->StoreInternal(std::string(entryName), PhysicalDirectoryEntry{ std::move(directoryPath) });
} }
@@ -238,6 +244,9 @@ namespace Nz
if (!CreateOrRetrieveDirectory(path, dir, entryName)) if (!CreateOrRetrieveDirectory(path, dir, entryName))
throw std::runtime_error("invalid path"); throw std::runtime_error("invalid path");
if (entryName == "." || entryName == "..")
throw std::runtime_error("invalid entry name");
return dir->StoreInternal(std::string(entryName), FileContentEntry{ std::move(file) }); return dir->StoreInternal(std::string(entryName), FileContentEntry{ std::move(file) });
} }
@@ -250,6 +259,9 @@ namespace Nz
if (!CreateOrRetrieveDirectory(path, dir, entryName)) if (!CreateOrRetrieveDirectory(path, dir, entryName))
throw std::runtime_error("invalid path"); throw std::runtime_error("invalid path");
if (entryName == "." || entryName == "..")
throw std::runtime_error("invalid entry name");
return dir->StoreInternal(std::string(entryName), PhysicalFileEntry{ std::move(filePath) }); return dir->StoreInternal(std::string(entryName), PhysicalFileEntry{ std::move(filePath) });
} }
@@ -262,6 +274,9 @@ namespace Nz
if (!CreateOrRetrieveDirectory(path, dir, entryName)) if (!CreateOrRetrieveDirectory(path, dir, entryName))
throw std::runtime_error("invalid path"); throw std::runtime_error("invalid path");
if (entryName == "." || entryName == "..")
throw std::runtime_error("invalid entry name");
return dir->StoreInternal(std::string(entryName), DataPointerEntry{ data, size }); return dir->StoreInternal(std::string(entryName), DataPointerEntry{ data, size });
} }