diff options
Diffstat (limited to 'CPP/7zip/Archive/Zip/ZipIn.cpp')
-rw-r--r-- | CPP/7zip/Archive/Zip/ZipIn.cpp | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/CPP/7zip/Archive/Zip/ZipIn.cpp b/CPP/7zip/Archive/Zip/ZipIn.cpp index 076d6bb..f2b69a9 100644 --- a/CPP/7zip/Archive/Zip/ZipIn.cpp +++ b/CPP/7zip/Archive/Zip/ZipIn.cpp | |||
@@ -1045,9 +1045,24 @@ bool CInArchive::ReadExtra(const CLocalItem &item, unsigned extraSize, CExtraBlo | |||
1045 | 1045 | ||
1046 | if (cdItem) | 1046 | if (cdItem) |
1047 | { | 1047 | { |
1048 | if (isOK && ZIP64_IS_32_MAX(cdItem->LocalHeaderPos)) | 1048 | if (isOK) |
1049 | { if (size < 8) isOK = false; else { size -= 8; cdItem->LocalHeaderPos = ReadUInt64(); }} | 1049 | { |
1050 | 1050 | if (ZIP64_IS_32_MAX(cdItem->LocalHeaderPos)) | |
1051 | { if (size < 8) isOK = false; else { size -= 8; cdItem->LocalHeaderPos = ReadUInt64(); }} | ||
1052 | /* | ||
1053 | else if (size == 8) | ||
1054 | { | ||
1055 | size -= 8; | ||
1056 | const UInt64 v = ReadUInt64(); | ||
1057 | // soong_zip, an AOSP tool (written in the Go) writes incorrect value. | ||
1058 | // we can ignore that minor error here | ||
1059 | if (v != cdItem->LocalHeaderPos) | ||
1060 | isOK = false; // ignore error | ||
1061 | // isOK = false; // force error | ||
1062 | } | ||
1063 | */ | ||
1064 | } | ||
1065 | |||
1051 | if (isOK && ZIP64_IS_16_MAX(cdItem->Disk)) | 1066 | if (isOK && ZIP64_IS_16_MAX(cdItem->Disk)) |
1052 | { if (size < 4) isOK = false; else { size -= 4; cdItem->Disk = ReadUInt32(); }} | 1067 | { if (size < 4) isOK = false; else { size -= 4; cdItem->Disk = ReadUInt32(); }} |
1053 | } | 1068 | } |
@@ -1926,7 +1941,7 @@ static int FindItem(const CObjectVector<CItemEx> &items, const CItemEx &item) | |||
1926 | { | 1941 | { |
1927 | if (left >= right) | 1942 | if (left >= right) |
1928 | return -1; | 1943 | return -1; |
1929 | const unsigned index = (left + right) / 2; | 1944 | const unsigned index = (unsigned)(((size_t)left + (size_t)right) / 2); |
1930 | const CItemEx &item2 = items[index]; | 1945 | const CItemEx &item2 = items[index]; |
1931 | if (item.Disk < item2.Disk) | 1946 | if (item.Disk < item2.Disk) |
1932 | right = index; | 1947 | right = index; |