Revert "Fix deprecatation warning when building for recent SDKs on iOS/OS X."

This reverts CL https://codereview.chromium.org/1563223004/
This reverts commit 7cc0d8562bf8b20b88cc941ba72593cb7230ecf6.

CL 1563223004 introduces two bugs on iOS.
- Encoding the minidump name with extra percent causing crash server to fail
  processing the file.
- Using a released pointer causing random crashes on upload. The
  data, resp, err pointers returned in the NSURLSession completion
  handler is released at the end of the block. When used later (to get
  the crash ID), it causes a crash.

BUG=569158
R=blundell@chromium.org, mark@chromium.org

Review URL: https://codereview.chromium.org/1619603002 .

Patch from Olivier Robin <olivierrobin@chromium.org>.
This commit is contained in:
Olivier Robin 2016-01-21 11:34:12 -05:00 committed by Mark Mentovai
parent 8baa236daa
commit 658eb44f3f
2 changed files with 10 additions and 62 deletions

View file

@ -154,9 +154,9 @@ void MinidumpGenerator::GatherSystemInformation() {
if (!data) { if (!data) {
return; return;
} }
CFDictionaryRef list = CFDictionaryRef list = static_cast<CFDictionaryRef>
static_cast<CFDictionaryRef>(CFPropertyListCreateWithData( (CFPropertyListCreateFromXMLData(NULL, data, kCFPropertyListImmutable,
NULL, data, kCFPropertyListImmutable, NULL, NULL)); NULL));
CFRelease(data); CFRelease(data);
if (!list) { if (!list) {
return; return;

View file

@ -30,62 +30,6 @@
#import "HTTPMultipartUpload.h" #import "HTTPMultipartUpload.h"
#import "GTMDefines.h" #import "GTMDefines.h"
#include <Availability.h>
#include <AvailabilityMacros.h>
// As -[NSString stringByAddingPercentEscapesUsingEncoding:] has been
// deprecated with iOS 9.0 / OS X 10.11 SDKs, this function re-implements it
// using -[NSString stringByAddingPercentEncodingWithAllowedCharacters:] when
// using those SDKs.
static NSString *PercentEncodeNSString(NSString *key) {
#if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && defined(__IPHONE_9_0) && \
__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_9_0) || \
(defined(MAC_OS_X_VERSION_MIN_REQUIRED) && \
defined(MAC_OS_X_VERSION_10_11) && \
MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_11)
return [key stringByAddingPercentEncodingWithAllowedCharacters:
[NSCharacterSet alphanumericCharacterSet]];
#else
return [key stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
#endif
}
// As -[NSURLConnection sendSynchronousRequest:returningResponse:error:] has
// been deprecated with iOS 9.0 / OS X 10.11 SDKs, this function re-implements
// it using -[NSURLSession dataTaskWithRequest:completionHandler:] when using
// those SDKs.
static NSData *SendSynchronousNSURLRequest(NSURLRequest *req,
NSURLResponse **response,
NSError **error) {
#if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && defined(__IPHONE_9_0) && \
__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_9_0) || \
(defined(MAC_OS_X_VERSION_MIN_REQUIRED) && \
defined(MAC_OS_X_VERSION_10_11) && \
MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_11)
__block NSData* result = nil;
dispatch_semaphore_t wait_semaphone = dispatch_semaphore_create(0);
[[[NSURLSession sharedSession]
dataTaskWithRequest:req
completionHandler:^(NSData *data, NSURLResponse *resp,
NSError *err) {
if (error)
*error = err;
if (response)
*response = resp;
if (err == nil)
result = data;
dispatch_semaphore_signal(wait_semaphone);
}] resume];
dispatch_semaphore_wait(wait_semaphone, DISPATCH_TIME_FOREVER);
dispatch_release(wait_semaphone);
return result;
#else
return [NSURLConnection sendSynchronousRequest:req
returningResponse:response
error:error];
#endif
}
@interface HTTPMultipartUpload(PrivateMethods) @interface HTTPMultipartUpload(PrivateMethods)
- (NSString *)multipartBoundary; - (NSString *)multipartBoundary;
// Each of the following methods will append the starting multipart boundary, // Each of the following methods will append the starting multipart boundary,
@ -108,7 +52,8 @@ static NSData *SendSynchronousNSURLRequest(NSURLRequest *req,
//============================================================================= //=============================================================================
- (NSData *)formDataForKey:(NSString *)key value:(NSString *)value { - (NSData *)formDataForKey:(NSString *)key value:(NSString *)value {
NSString *escaped = PercentEncodeNSString(key); NSString *escaped =
[key stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *fmt = NSString *fmt =
@"--%@\r\nContent-Disposition: form-data; name=\"%@\"\r\n\r\n%@\r\n"; @"--%@\r\nContent-Disposition: form-data; name=\"%@\"\r\n\r\n%@\r\n";
NSString *form = [NSString stringWithFormat:fmt, boundary_, escaped, value]; NSString *form = [NSString stringWithFormat:fmt, boundary_, escaped, value];
@ -119,7 +64,8 @@ static NSData *SendSynchronousNSURLRequest(NSURLRequest *req,
//============================================================================= //=============================================================================
- (NSData *)formDataForFileContents:(NSData *)contents name:(NSString *)name { - (NSData *)formDataForFileContents:(NSData *)contents name:(NSString *)name {
NSMutableData *data = [NSMutableData data]; NSMutableData *data = [NSMutableData data];
NSString *escaped = PercentEncodeNSString(name); NSString *escaped =
[name stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *fmt = @"--%@\r\nContent-Disposition: form-data; name=\"%@\"; " NSString *fmt = @"--%@\r\nContent-Disposition: form-data; name=\"%@\"; "
"filename=\"minidump.dmp\"\r\nContent-Type: application/octet-stream\r\n\r\n"; "filename=\"minidump.dmp\"\r\nContent-Type: application/octet-stream\r\n\r\n";
NSString *pre = [NSString stringWithFormat:fmt, boundary_, escaped]; NSString *pre = [NSString stringWithFormat:fmt, boundary_, escaped];
@ -250,7 +196,9 @@ static NSData *SendSynchronousNSURLRequest(NSURLRequest *req,
[[req HTTPBody] writeToURL:[req URL] options:0 error:error]; [[req HTTPBody] writeToURL:[req URL] options:0 error:error];
} else { } else {
NSURLResponse *response = nil; NSURLResponse *response = nil;
data = SendSynchronousNSURLRequest(req, &response, error); data = [NSURLConnection sendSynchronousRequest:req
returningResponse:&response
error:error];
response_ = (NSHTTPURLResponse *)[response retain]; response_ = (NSHTTPURLResponse *)[response retain];
} }
[req release]; [req release];