diff options
Diffstat (limited to 'CPP/7zip/Archive/Zip/ZipItem.h')
-rw-r--r-- | CPP/7zip/Archive/Zip/ZipItem.h | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/CPP/7zip/Archive/Zip/ZipItem.h b/CPP/7zip/Archive/Zip/ZipItem.h index d50c3ae9..98afdf1d 100644 --- a/CPP/7zip/Archive/Zip/ZipItem.h +++ b/CPP/7zip/Archive/Zip/ZipItem.h @@ -179,9 +179,12 @@ struct CExtraBlock void RemoveUnknownSubBlocks() { - for (int i = SubBlocks.Size() - 1; i >= 0; i--) + for (unsigned i = SubBlocks.Size(); i != 0;) + { + i--; if (SubBlocks[i].ID != NFileHeader::NExtraID::kWzAES) SubBlocks.Delete(i); + } } }; @@ -204,8 +207,8 @@ public: bool IsUtf8() const { return (Flags & NFileHeader::NFlags::kUtf8) != 0; } bool IsEncrypted() const { return (Flags & NFileHeader::NFlags::kEncrypted) != 0; } - bool IsStrongEncrypted() const { return IsEncrypted() && (Flags & NFileHeader::NFlags::kStrongEncrypted) != 0; }; - bool IsAesEncrypted() const { return IsEncrypted() && (IsStrongEncrypted() || Method == NFileHeader::NCompressionMethod::kWzAES); }; + bool IsStrongEncrypted() const { return IsEncrypted() && (Flags & NFileHeader::NFlags::kStrongEncrypted) != 0; } + bool IsAesEncrypted() const { return IsEncrypted() && (IsStrongEncrypted() || Method == NFileHeader::NCompressionMethod::kWzAES); } bool IsLzmaEOS() const { return (Flags & NFileHeader::NFlags::kLzmaEOS) != 0; } bool HasDescriptor() const { return (Flags & NFileHeader::NFlags::kDescriptorUsedMask) != 0; } @@ -237,6 +240,7 @@ public: void ClearFlags() { Flags = 0; } void SetEncrypted(bool encrypted) { SetFlag(NFileHeader::NFlags::kEncrypted, encrypted); } void SetUtf8(bool isUtf8) { SetFlag(NFileHeader::NFlags::kUtf8, isUtf8); } + void SetDescriptorMode(bool useDescriptor) { SetFlag(NFileHeader::NFlags::kDescriptorUsedMask, useDescriptor); } UINT GetCodePage() const { return CP_OEMCP; } }; @@ -277,6 +281,7 @@ public: void GetUnicodeString(const AString &s, UString &res, bool useSpecifiedCodePage, UINT codePage) const { bool isUtf8 = IsUtf8(); + bool ignore_Utf8_Errors = true; #ifdef _WIN32 if (!isUtf8) @@ -287,14 +292,15 @@ public: { /* Some ZIP archives in Unix use UTF-8 encoding without Utf8 flag in header. We try to get name as UTF-8. - Do we need to do it in POSIX version also? */ + Do we need to do it in POSIX version also? */ isUtf8 = true; + ignore_Utf8_Errors = false; } } #endif if (isUtf8) - if (ConvertUTF8ToUnicode(s, res)) + if (ConvertUTF8ToUnicode(s, res) || ignore_Utf8_Errors) return; MultiByteToUnicodeString2(res, s, useSpecifiedCodePage ? codePage : GetCodePage()); } |