Skip to content

Commit 7e16682

Browse files
authored
Merge pull request #50 from NSProgrammer/zip_test
add `zip -T` like validation
2 parents 3a9e7f9 + 1fe0777 commit 7e16682

File tree

11 files changed

+86
-5
lines changed

11 files changed

+86
-5
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22

33
## History
44

5+
### 1.9.3 (Feb 20, 2017) - Nolan O'Brien
6+
7+
- add checksum error code and record validation method to unzipper
8+
9+
### 1.9.2 (Feb 19, 2017) - Nolan O'Brien
10+
11+
- updated zstd to v1.1.3
12+
513
### 1.9.1 (Jan 31, 2017) - Nolan O'Brien
614

715
- Miscellaneous minor fixes

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ Alternatively you may use one of the following dependency managers:
3232
Add _ZipUtilities_ to your `Podfile`
3333

3434
```ruby
35-
pod 'ZipUtilities', '~> 1.9.1'
35+
pod 'ZipUtilities', '~> 1.9.3'
3636
```
3737

3838
#### Carthage

ZipUtilities.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = "ZipUtilities"
3-
s.version = "1.9.1"
3+
s.version = "1.9.3"
44
s.summary = "Zip Archiving, Unarchiving and Utilities in Objective-C"
55
s.description = <<-DESC
66
ZipUtilities, prefixed with NOZ for Nolan O'Brien ZipUtilities, is a library of zipping and unzipping utilities for iOS and Mac OS X.

ZipUtilities.xcodeproj/project.pbxproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,9 @@
276276
8BAE42591E5A9E4200AFD299 /* zstd_common.c in Sources */ = {isa = PBXBuildFile; fileRef = 8BAE42411E5A9E4200AFD299 /* zstd_common.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; };
277277
8BAE425A1E5A9E4200AFD299 /* zstd_errors.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BAE42421E5A9E4200AFD299 /* zstd_errors.h */; };
278278
8BAE425B1E5A9E4200AFD299 /* zstd_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BAE42431E5A9E4200AFD299 /* zstd_internal.h */; };
279+
8BAE425D1E5AAFFE00AFD299 /* Bad_File.zip in Resources */ = {isa = PBXBuildFile; fileRef = 8BAE425C1E5AAFFE00AFD299 /* Bad_File.zip */; };
280+
8BAE425E1E5AB56C00AFD299 /* Bad_File.zip in Resources */ = {isa = PBXBuildFile; fileRef = 8BAE425C1E5AAFFE00AFD299 /* Bad_File.zip */; };
281+
8BAE425F1E5AB56C00AFD299 /* Bad_File.zip in Resources */ = {isa = PBXBuildFile; fileRef = 8BAE425C1E5AAFFE00AFD299 /* Bad_File.zip */; };
279282
8BDA6F921DDD7524004EEF12 /* ZipUtilities.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 4623A82E1B9A828A00A56535 /* ZipUtilities.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
280283
B3F87BF51CF4C09600FBBFEF /* module.modulemap in Headers */ = {isa = PBXBuildFile; fileRef = B3F87BF41CF4C08A00FBBFEF /* module.modulemap */; settings = {ATTRIBUTES = (Public, ); }; };
281284
B3F87BF61CF4C21600FBBFEF /* ZipUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 4623A8321B9A828A00A56535 /* ZipUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -602,6 +605,7 @@
602605
8BAE42411E5A9E4200AFD299 /* zstd_common.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = zstd_common.c; path = Extra/zstd/common/zstd_common.c; sourceTree = "<group>"; };
603606
8BAE42421E5A9E4200AFD299 /* zstd_errors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = zstd_errors.h; path = Extra/zstd/common/zstd_errors.h; sourceTree = "<group>"; };
604607
8BAE42431E5A9E4200AFD299 /* zstd_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = zstd_internal.h; path = Extra/zstd/common/zstd_internal.h; sourceTree = "<group>"; };
608+
8BAE425C1E5AAFFE00AFD299 /* Bad_File.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = Bad_File.zip; sourceTree = "<group>"; };
605609
B3F87BF41CF4C08A00FBBFEF /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = "<group>"; };
606610
/* End PBXFileReference section */
607611

@@ -840,6 +844,7 @@
840844
children = (
841845
1CD9BAB31B757A38000B93C4 /* Aesop.txt */,
842846
8B3C0CEC1DDCEAAE000C7DE1 /* book.zstd_dict */,
847+
8BAE425C1E5AAFFE00AFD299 /* Bad_File.zip */,
843848
1C3223841B78501A00DC0A33 /* Data.zip */,
844849
1CD9BAB81B75B419000B93C4 /* Directory.zip */,
845850
1CD9BAB91B75B419000B93C4 /* File.zip */,
@@ -1489,6 +1494,7 @@
14891494
1C3223851B78501A00DC0A33 /* Data.zip in Resources */,
14901495
1CD9BABD1B75B419000B93C4 /* File.zip in Resources */,
14911496
1C2DFB3B1C207E7700C9A238 /* Star.Wars.7.Trailer.mp4.zip in Resources */,
1497+
8BAE425D1E5AAFFE00AFD299 /* Bad_File.zip in Resources */,
14921498
8B8D5AA81DDD2E9100037E0E /* htl.512.zstd_dict in Resources */,
14931499
1CD9BAB41B757A38000B93C4 /* Aesop.txt in Resources */,
14941500
8B8D5AAB1DDD2E9100037E0E /* htl.1024.zstd_dict in Resources */,
@@ -1517,6 +1523,7 @@
15171523
4623A89A1B9A882700A56535 /* File.zip in Resources */,
15181524
4623A89B1B9A882700A56535 /* Mixed.zip in Resources */,
15191525
1C2DFB3C1C207E7700C9A238 /* Star.Wars.7.Trailer.mp4.zip in Resources */,
1526+
8BAE425E1E5AB56C00AFD299 /* Bad_File.zip in Resources */,
15201527
8B8D5AA91DDD2E9100037E0E /* htl.512.zstd_dict in Resources */,
15211528
4623A8991B9A882700A56535 /* Directory.zip in Resources */,
15221529
8B8D5AAC1DDD2E9100037E0E /* htl.1024.zstd_dict in Resources */,
@@ -1545,6 +1552,7 @@
15451552
4623A89F1B9A882800A56535 /* File.zip in Resources */,
15461553
4623A8A01B9A882800A56535 /* Mixed.zip in Resources */,
15471554
1C2DFB3D1C207E7700C9A238 /* Star.Wars.7.Trailer.mp4.zip in Resources */,
1555+
8BAE425F1E5AB56C00AFD299 /* Bad_File.zip in Resources */,
15481556
8B8D5AAA1DDD2E9100037E0E /* htl.512.zstd_dict in Resources */,
15491557
4623A89E1B9A882800A56535 /* Directory.zip in Resources */,
15501558
8B8D5AAD1DDD2E9100037E0E /* htl.1024.zstd_dict in Resources */,

ZipUtilities/Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<key>CFBundlePackageType</key>
1616
<string>FMWK</string>
1717
<key>CFBundleShortVersionString</key>
18-
<string>1.9.1</string>
18+
<string>1.9.3</string>
1919
<key>CFBundleSignature</key>
2020
<string>????</string>
2121
<key>CFBundleVersion</key>

ZipUtilities/NOZError.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,8 @@ typedef NS_ENUM(NSInteger, NOZErrorCode)
155155
NOZErrorCodeUnzipCannotReadFileEntry,
156156
/** Unzipper couldn't decompress a file entry */
157157
NOZErrorCodeUnzipCannotDecompressFileEntry,
158+
/** Unzipping data didn't match CRC32 checksum */
159+
NOZErrorCodeUnzipChecksumMissmatch,
158160
/** An entry failed to be decompressed */
159161
NOZErrorCodeUnzipFailedToDecompressEntry,
160162
};

ZipUtilities/NOZUnzipper.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,13 @@ typedef NS_OPTIONS(NSInteger, NOZUnzipperSaveRecordOptions)
244244
progressBlock:(nullable NOZProgressBlock)progressBlock
245245
error:(out NSError *__autoreleasing __nullable * __nullable)error;
246246

247+
/**
248+
Validate a record.
249+
*/
250+
- (BOOL)validateRecord:(nonnull NOZCentralDirectoryRecord *)record
251+
progressBlock:(nullable NOZProgressBlock)progressBlock
252+
error:(out NSError *__autoreleasing __nullable * __nullable)error;
253+
247254
/**
248255
*DEPRECATED*: See `saveRecord:toDirectory:options:progressBlock:error:`
249256
*/

ZipUtilities/NOZUnzipper.m

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,18 @@ - (BOOL)saveRecord:(NOZCentralDirectoryRecord *)record
395395
return YES;
396396
}
397397

398+
- (BOOL)validateRecord:(NOZCentralDirectoryRecord *)record
399+
progressBlock:(NOZProgressBlock)progressBlock
400+
error:(out NSError **)error
401+
{
402+
return [self enumerateByteRangesOfRecord:record
403+
progressBlock:progressBlock
404+
usingBlock:^(const void * __nonnull bytes, NSRange byteRange, BOOL * __nonnull stop) {
405+
(void)bytes;
406+
}
407+
error:error];
408+
}
409+
398410
@end
399411

400412
@implementation NOZUnzipper (Private)
@@ -572,8 +584,17 @@ - (BOOL)private_deflateWithProgressBlock:(NOZProgressBlock)progressBlock
572584

573585
} // while (...)
574586

575-
if (stop || (_currentUnzipping.crc32 != _currentUnzipping.entry->fileDescriptor.crc32)) {
587+
if (stop) {
588+
success = NO;
589+
return NO;
590+
}
591+
592+
if (_currentUnzipping.crc32 != _currentUnzipping.entry->fileDescriptor.crc32) {
576593
success = NO;
594+
if (error) {
595+
*error = NOZError(NOZErrorCodeUnzipChecksumMissmatch, nil);
596+
}
597+
577598
return NO;
578599
}
579600

ZipUtilities/OSX-Info.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
<key>CFBundlePackageType</key>
1616
<string>FMWK</string>
1717
<key>CFBundleShortVersionString</key>
18-
<string>1.9.1</string>
18+
<string>1.9.3</string>
1919
<key>CFBundleSignature</key>
2020
<string>????</string>
2121
<key>CFBundleVersion</key>

ZipUtilitiesTests/Bad_File.zip

24.7 KB
Binary file not shown.

0 commit comments

Comments
 (0)