diff --git a/Common/File/VFS/ZipFileReader.cpp b/Common/File/VFS/ZipFileReader.cpp index 83655bc989..d9dcf4a84c 100644 --- a/Common/File/VFS/ZipFileReader.cpp +++ b/Common/File/VFS/ZipFileReader.cpp @@ -351,7 +351,11 @@ public: VFSFileReference *ZipFileReader::GetFile(std::string_view path) { std::string p(path); - int zi = zip_name_locate(zip_file_, p.c_str(), ZIP_FL_NOCASE); // this is EXPENSIVE + // An exact match uses libzip's hash table, the case insensitive one compares every name in the zip. + int zi = zip_name_locate(zip_file_, p.c_str(), 0); + if (zi < 0) { + zi = zip_name_locate(zip_file_, p.c_str(), ZIP_FL_NOCASE); + } if (zi < 0) { // Not found. return nullptr;