Fix leak in setting response headers
Alter read buffer size depending on the Content-length header
Showing
1 changed file
with
11 additions
and
3 deletions
@@ -520,7 +520,7 @@ static NSError *ASIUnableToCreateRequestError; | @@ -520,7 +520,7 @@ static NSError *ASIUnableToCreateRequestError; | ||
520 | [cancelledLock unlock]; | 520 | [cancelledLock unlock]; |
521 | return; | 521 | return; |
522 | } | 522 | } |
523 | - unsigned long long byteCount = [[(NSNumber *)CFReadStreamCopyProperty (readStream, kCFStreamPropertyHTTPRequestBytesWrittenCount) autorelease] unsignedLongLongValue]; | 523 | + unsigned long long byteCount = [[(NSNumber *)CFReadStreamCopyProperty(readStream, kCFStreamPropertyHTTPRequestBytesWrittenCount) autorelease] unsignedLongLongValue]; |
524 | 524 | ||
525 | // If this is the first time we've written to the buffer, byteCount will be the size of the buffer (currently seems to be 128KB on both Mac and iPhone) | 525 | // If this is the first time we've written to the buffer, byteCount will be the size of the buffer (currently seems to be 128KB on both Mac and iPhone) |
526 | // We will remove this from any progress display, as kCFStreamPropertyHTTPRequestBytesWrittenCount does not tell us how much data has actually be written | 526 | // We will remove this from any progress display, as kCFStreamPropertyHTTPRequestBytesWrittenCount does not tell us how much data has actually be written |
@@ -755,7 +755,9 @@ static NSError *ASIUnableToCreateRequestError; | @@ -755,7 +755,9 @@ static NSError *ASIUnableToCreateRequestError; | ||
755 | BOOL isAuthenticationChallenge = NO; | 755 | BOOL isAuthenticationChallenge = NO; |
756 | CFHTTPMessageRef headers = (CFHTTPMessageRef)CFReadStreamCopyProperty(readStream, kCFStreamPropertyHTTPResponseHeader); | 756 | CFHTTPMessageRef headers = (CFHTTPMessageRef)CFReadStreamCopyProperty(readStream, kCFStreamPropertyHTTPResponseHeader); |
757 | if (CFHTTPMessageIsHeaderComplete(headers)) { | 757 | if (CFHTTPMessageIsHeaderComplete(headers)) { |
758 | - [self setResponseHeaders:(NSDictionary *)CFHTTPMessageCopyAllHeaderFields(headers)]; | 758 | + CFDictionaryRef headerFields = CFHTTPMessageCopyAllHeaderFields(headers); |
759 | + [self setResponseHeaders:(NSDictionary *)headerFields]; | ||
760 | + CFRelease(headerFields); | ||
759 | [self setResponseStatusCode:CFHTTPMessageGetResponseStatusCode(headers)]; | 761 | [self setResponseStatusCode:CFHTTPMessageGetResponseStatusCode(headers)]; |
760 | 762 | ||
761 | // Is the server response a challenge for credentials? | 763 | // Is the server response a challenge for credentials? |
@@ -1058,8 +1060,14 @@ static NSError *ASIUnableToCreateRequestError; | @@ -1058,8 +1060,14 @@ static NSError *ASIUnableToCreateRequestError; | ||
1058 | return; | 1060 | return; |
1059 | } | 1061 | } |
1060 | } | 1062 | } |
1063 | + int bufferSize = 2048; | ||
1064 | + if (contentLength > 262144) { | ||
1065 | + bufferSize = 65536; | ||
1066 | + } else if (contentLength > 65536) { | ||
1067 | + bufferSize = 16384; | ||
1068 | + } | ||
1061 | 1069 | ||
1062 | - UInt8 buffer[2048]; | 1070 | + UInt8 buffer[bufferSize]; |
1063 | CFIndex bytesRead = CFReadStreamRead(readStream, buffer, sizeof(buffer)); | 1071 | CFIndex bytesRead = CFReadStreamRead(readStream, buffer, sizeof(buffer)); |
1064 | 1072 | ||
1065 | 1073 |
-
Please register or login to post a comment