Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ TryReadZip64EndOfCentralDirectory()

void System.IO.Compression.ZipArchive.TryReadZip64EndOfCentralDirectory ( ZipEndOfCentralDirectoryBlock eocd,
long eocdStart )
inlineprivate

Definition at line 396 of file ZipArchive.cs.

397 {
398 if (eocd.NumberOfThisDisk != ushort.MaxValue && eocd.OffsetOfStartOfCentralDirectoryWithRespectToTheStartingDiskNumber != uint.MaxValue && eocd.NumberOfEntriesInTheCentralDirectory != ushort.MaxValue)
399 {
400 return;
401 }
403 if (ZipHelper.SeekBackwardsToSignature(_archiveStream, 117853008u, 4))
404 {
405 Zip64EndOfCentralDirectoryLocator zip64EOCDLocator;
406 bool flag = Zip64EndOfCentralDirectoryLocator.TryReadBlock(_archiveReader, out zip64EOCDLocator);
407 if (zip64EOCDLocator.OffsetOfZip64EOCD > long.MaxValue)
408 {
409 throw new InvalidDataException(System.SR.FieldTooBigOffsetToZip64EOCD);
410 }
411 long offsetOfZip64EOCD = (long)zip64EOCDLocator.OffsetOfZip64EOCD;
413 if (!Zip64EndOfCentralDirectoryRecord.TryReadBlock(_archiveReader, out var zip64EOCDRecord))
414 {
415 throw new InvalidDataException(System.SR.Zip64EOCDNotWhereExpected);
416 }
417 _numberOfThisDisk = zip64EOCDRecord.NumberOfThisDisk;
418 if (zip64EOCDRecord.NumberOfEntriesTotal > long.MaxValue)
419 {
420 throw new InvalidDataException(System.SR.FieldTooBigNumEntries);
421 }
422 if (zip64EOCDRecord.OffsetOfCentralDirectory > long.MaxValue)
423 {
424 throw new InvalidDataException(System.SR.FieldTooBigOffsetToCD);
425 }
426 if (zip64EOCDRecord.NumberOfEntriesTotal != zip64EOCDRecord.NumberOfEntriesOnThisDisk)
427 {
428 throw new InvalidDataException(System.SR.SplitSpanned);
429 }
430 _expectedNumberOfEntries = (long)zip64EOCDRecord.NumberOfEntriesTotal;
431 _centralDirectoryStart = (long)zip64EOCDRecord.OffsetOfCentralDirectory;
432 }
433 }
long Seek(long offset, SeekOrigin origin)
static string FieldTooBigOffsetToCD
Definition SR.cs:90
static string SplitSpanned
Definition SR.cs:118
static string Zip64EOCDNotWhereExpected
Definition SR.cs:132
static string FieldTooBigOffsetToZip64EOCD
Definition SR.cs:92
static string FieldTooBigNumEntries
Definition SR.cs:88
Definition SR.cs:7

References System.IO.Compression.ZipArchive._archiveReader, System.IO.Compression.ZipArchive._archiveStream, System.IO.Compression.ZipArchive._centralDirectoryStart, System.IO.Compression.ZipArchive._expectedNumberOfEntries, System.IO.Compression.ZipArchive._numberOfThisDisk, System.SR.FieldTooBigNumEntries, System.SR.FieldTooBigOffsetToCD, System.SR.FieldTooBigOffsetToZip64EOCD, System.IO.Stream.Seek(), System.IO.Compression.ZipHelper.SeekBackwardsToSignature(), System.SR.SplitSpanned, System.IO.Compression.Zip64EndOfCentralDirectoryLocator.TryReadBlock(), System.IO.Compression.Zip64EndOfCentralDirectoryRecord.TryReadBlock(), and System.SR.Zip64EOCDNotWhereExpected.

Referenced by System.IO.Compression.ZipArchive.ReadEndOfCentralDirectory().