Skip to content

Commit c23e46c

Browse files
committed
CB-9265 - mobilespec crashses on iPhone 6 Simulator
1 parent 09132eb commit c23e46c

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

src/ios/CDVFile.m

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,25 @@ Licensed to the Apache Software Foundation (ASF) under one
2323
#import "CDVAssetLibraryFilesystem.h"
2424
#import <objc/message.h>
2525

26+
static NSString* toBase64(NSData* data) {
27+
SEL s1 = NSSelectorFromString(@"cdv_base64EncodedString");
28+
SEL s2 = NSSelectorFromString(@"base64EncodedString");
29+
SEL s3 = NSSelectorFromString(@"base64EncodedStringWithOptions:");
30+
31+
if ([data respondsToSelector:s1]) {
32+
NSString* (*func)(id, SEL) = (void *)[data methodForSelector:s1];
33+
return func(data, s1);
34+
} else if ([data respondsToSelector:s2]) {
35+
NSString* (*func)(id, SEL) = (void *)[data methodForSelector:s2];
36+
return func(data, s2);
37+
} else if ([data respondsToSelector:s3]) {
38+
NSString* (*func)(id, SEL, NSUInteger) = (void *)[data methodForSelector:s3];
39+
return func(data, s3, 0);
40+
} else {
41+
return nil;
42+
}
43+
}
44+
2645
CDVFile *filePlugin = nil;
2746

2847
extern NSString * const NSURLIsExcludedFromBackupKey __attribute__((weak_import));
@@ -878,12 +897,7 @@ - (void)readAsDataURL:(CDVInvokedUrlCommand*)command
878897
[fs readFileAtURL:localURI start:start end:end callback:^(NSData* data, NSString* mimeType, CDVFileError errorCode) {
879898
CDVPluginResult* result = nil;
880899
if (data != nil) {
881-
SEL selector = NSSelectorFromString(@"cdv_base64EncodedString");
882-
if (![data respondsToSelector:selector]) {
883-
selector = NSSelectorFromString(@"base64EncodedString");
884-
}
885-
id (*func)(id, SEL) = (void *)[data methodForSelector:selector];
886-
NSString* b64Str = func(data, selector);
900+
NSString* b64Str = toBase64(data);
887901
NSString* output = [NSString stringWithFormat:@"data:%@;base64,%@", mimeType, b64Str];
888902
result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:output];
889903
} else {

0 commit comments

Comments
 (0)