From 712375f4d8998aece37ebca115e30ef9dbed2baf Mon Sep 17 00:00:00 2001 From: Pierre-Loup Tristant Date: Sat, 22 Mar 2014 18:14:14 +0100 Subject: [PATCH 1/2] Fixed crash when stub with very long data and no delay for response --- OHHTTPStubs/Sources/OHHTTPStubs.m | 2 +- OHHTTPStubs/UnitTests/Test Suites/TimingTests.m | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/OHHTTPStubs/Sources/OHHTTPStubs.m b/OHHTTPStubs/Sources/OHHTTPStubs.m index 3b4604b0..41871305 100644 --- a/OHHTTPStubs/Sources/OHHTTPStubs.m +++ b/OHHTTPStubs/Sources/OHHTTPStubs.m @@ -469,7 +469,7 @@ - (void) streamDataForClient:(id)client timingInfo:timingInfo completion:completion]; }); } else { - uint8_t buffer[chunkSizeToRead]; + uint8_t* buffer = (uint8_t*)malloc(sizeof(uint8_t*)*chunkSizeToRead); NSInteger bytesRead = [inputStream read:buffer maxLength:chunkSizeToRead]; if (bytesRead > 0) { diff --git a/OHHTTPStubs/UnitTests/Test Suites/TimingTests.m b/OHHTTPStubs/UnitTests/Test Suites/TimingTests.m index 7155e8f2..2665b5dc 100644 --- a/OHHTTPStubs/UnitTests/Test Suites/TimingTests.m +++ b/OHHTTPStubs/UnitTests/Test Suites/TimingTests.m @@ -126,4 +126,16 @@ -(void)test_LongData_RequestTime1_ResponseTime5 [self _testWithData:testData requestTime:1 responseTime:5]; } +-(void)test_VeryLongData_RequestTime1_ResponseTime0 +{ + static NSUInteger const kDataLength = 609792; + NSMutableData* testData = [NSMutableData dataWithCapacity:kDataLength]; + NSData* chunk = [[NSProcessInfo.processInfo globallyUniqueString] dataUsingEncoding:NSUTF8StringEncoding]; + while(testData.length Date: Wed, 30 Apr 2014 12:31:58 +0200 Subject: [PATCH 2/2] Add missing free call --- OHHTTPStubs/Sources/OHHTTPStubs.m | 1 + 1 file changed, 1 insertion(+) diff --git a/OHHTTPStubs/Sources/OHHTTPStubs.m b/OHHTTPStubs/Sources/OHHTTPStubs.m index 41871305..2f3cd84d 100644 --- a/OHHTTPStubs/Sources/OHHTTPStubs.m +++ b/OHHTTPStubs/Sources/OHHTTPStubs.m @@ -492,6 +492,7 @@ - (void) streamDataForClient:(id)client completion(inputStream.streamError); } } + free(buffer); } } else