diff --git a/lib/ZipFile/ZipFile.cpp b/lib/ZipFile/ZipFile.cpp index 2a2af164..a740e14d 100644 --- a/lib/ZipFile/ZipFile.cpp +++ b/lib/ZipFile/ZipFile.cpp @@ -71,10 +71,15 @@ bool ZipFile::loadAllFileStatSlims() { file.read(&k, 2); file.seekCur(8); file.read(&fileStat.localHeaderOffset, 4); - file.read(itemName, nameLen); - itemName[nameLen] = '\0'; - fileStatSlimCache.emplace(itemName, fileStat); + if (nameLen < sizeof(itemName)) { + file.read(itemName, nameLen); + itemName[nameLen] = '\0'; + fileStatSlimCache.emplace(itemName, fileStat); + } else { + // Skip over oversized entry names to avoid writing past fixed buffer. + file.seekCur(nameLen); + } // Skip the rest of this entry (extra field + comment) file.seekCur(m + k);