11#import " CodePush.h"
2- #include < CommonCrypto/CommonDigest.h >
2+ #import " CodePushSha256.h "
33#import " JWT.h"
44
55@implementation CodePushUpdateUtils
@@ -57,23 +57,29 @@ + (BOOL)addContentsOfFolderToManifest:(NSString *)folderPath
5757 return NO ;
5858 }
5959 } else {
60- NSData *fileContents = [NSData dataWithContentsOfFile: fullFilePath];
61- NSString *fileContentsHash = [self computeHashForData: fileContents];
60+ NSString *fileContentsHash = CodePushSha256HexForFile (fullFilePath, error);
61+ if (!fileContentsHash) {
62+ return NO ;
63+ }
6264 [manifest addObject: [[relativePath stringByAppendingString: @" :" ] stringByAppendingString: fileContentsHash]];
6365 }
6466 }
6567
6668 return YES ;
6769}
6870
69- + (void )addFileToManifest : (NSURL *)fileURL
71+ + (BOOL )addFileToManifest : (NSURL *)fileURL
7072 manifest : (NSMutableArray *)manifest
73+ error : (NSError **)error
7174{
7275 if ([[NSFileManager defaultManager ] fileExistsAtPath: [fileURL path ]]) {
73- NSData *fileContents = [NSData dataWithContentsOfURL: fileURL];
74- NSString *fileContentsHash = [self computeHashForData: fileContents];
76+ NSString *fileContentsHash = CodePushSha256HexForFile ([fileURL path ], error);
77+ if (!fileContentsHash) {
78+ return NO ;
79+ }
7580 [manifest addObject: [NSString stringWithFormat: @" %@ /%@ :%@ " , [self manifestFolderPrefix ], [fileURL lastPathComponent ], fileContentsHash]];
7681 }
82+ return YES ;
7783}
7884
7985+ (NSString *)computeFinalHashFromManifest : (NSMutableArray *)manifest
@@ -93,19 +99,7 @@ + (NSString *)computeFinalHashFromManifest:(NSMutableArray *)manifest
9399 // The JSON serialization turns path separators into "\/", e.g. "CodePush\/assets\/image.png"
94100 manifestString = [manifestString stringByReplacingOccurrencesOfString: @" \\ /"
95101 withString: @" /" ];
96- return [self computeHashForData: [NSData dataWithBytes: manifestString.UTF8String length: [manifestString lengthOfBytesUsingEncoding: NSUTF8StringEncoding]]];
97- }
98-
99- + (NSString *)computeHashForData : (NSData *)inputData
100- {
101- uint8_t digest[CC_SHA256_DIGEST_LENGTH ];
102- CC_SHA256 (inputData.bytes , (CC_LONG )inputData.length , digest);
103- NSMutableString * inputHash = [NSMutableString stringWithCapacity: CC_SHA256_DIGEST_LENGTH * 2 ];
104- for (int i = 0 ; i < CC_SHA256_DIGEST_LENGTH ; i++) {
105- [inputHash appendFormat: @" %02x " , digest[i]];
106- }
107-
108- return inputHash;
102+ return CodePushSha256HexForData ([NSData dataWithBytes: manifestString.UTF8String length: [manifestString lengthOfBytesUsingEncoding: NSUTF8StringEncoding]]);
109103}
110104
111105+ (BOOL )copyEntriesInFolder : (NSString *)sourceFolder
@@ -230,8 +224,12 @@ + (NSString *)getHashForBinaryContents:(NSURL *)binaryBundleUrl
230224 }
231225 }
232226
233- [self addFileToManifest: binaryBundleUrl manifest: manifest];
234- [self addFileToManifest: [binaryBundleUrl URLByAppendingPathExtension: @" meta" ] manifest: manifest];
227+ if (![self addFileToManifest: binaryBundleUrl manifest: manifest error: error]) {
228+ return nil ;
229+ }
230+ if (![self addFileToManifest: [binaryBundleUrl URLByAppendingPathExtension: @" meta" ] manifest: manifest error: error]) {
231+ return nil ;
232+ }
235233
236234 binaryHash = [self computeFinalHashFromManifest: manifest error: error];
237235
0 commit comments