Skip to content

Commit 5f3bbab

Browse files
fix(compressor): fix MIME type detection failure for spanned ZIP files
- Some spanned ZIP files start with PK\x07\x08 signature (non-standard PK\x03\x04), which Qt MIME detection cannot recognize - When file extension is .zip but content detection returns non-ZIP type, fall back to file command for re-detection Qt 无法识别以 PK\x07\x08 开头的分卷 ZIP 文件,当扩展名为 .zip 但内容检测结果非 ZIP 类型时,回退使用 file 命令二次检测以确保 正确识别。 PMS: ztgd2026060900011 Influence: spanned ZIP files can be correctly detected and extracted
1 parent 573bdb2 commit 5f3bbab

1 file changed

Lines changed: 6 additions & 1 deletion

File tree

src/source/common/mimetypes.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,13 @@ CustomMimeType determineMimeType(const QString &filename)
117117
* 谷歌插件crx:内容检测为"application/octet-stream",后缀检测为"application/octet-stream",file命令探测为"application/x-chrome-extension"
118118
* zip分卷包:内容检测为"application/octet-stream",后缀检测为"application/zip",file命令探测为"application/octet-stream"
119119
* iso:内容检测为"application/octet-stream",后缀检测为"application/x-cd-image",file命令探测为"application/x-iso9660-image"
120+
* WinZip分卷ZIP:扩展名检测为"application/zip",内容检测可能不是zip(如误识别为pdf),file命令探测为"application/zip"
120121
*/
121-
if (mimeFromContent.isDefault()) {
122+
const QString &extName = mimeFromExtension.name();
123+
bool isZipExtension = (extName == QStringLiteral("application/zip"));
124+
bool isContentZip = mimeFromContent.inherits(QStringLiteral("application/zip"));
125+
bool needFileCommandFallback = mimeFromContent.isDefault() || (isZipExtension && !isContentZip);
126+
if (needFileCommandFallback) {
122127
qDebug() << "Using file command to detect MIME type for:" << filename;
123128
QProcess process;
124129
QStringList args;

0 commit comments

Comments
 (0)