aboutsummaryrefslogtreecommitdiff
path: root/CPP/7zip/Archive/Zip/ZipIn.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--CPP/7zip/Archive/Zip/ZipIn.cpp23
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;