Forráskód Böngészése

Fixed headers not being parsed properly when not received all at once

Pierre-Olivier Latour 12 éve
szülő
commit
bcd9654330
1 módosított fájl, 7 hozzáadás és 2 törlés
  1. 7 2
      CGDWebServer/GCDWebServerConnection.m

+ 7 - 2
CGDWebServer/GCDWebServerConnection.m

@@ -95,17 +95,22 @@ static dispatch_queue_t _formatterQueue = NULL;
 
 - (void)_readHeadersWithCompletionBlock:(ReadHeadersCompletionBlock)block {
   DCHECK(_requestMessage);
-  NSMutableData* data = [NSMutableData dataWithCapacity:kHeadersReadBuffer];
   [self _readBufferWithLength:SIZE_T_MAX completionBlock:^(dispatch_data_t buffer) {
     
     if (buffer) {
+      NSMutableData* data = [NSMutableData dataWithCapacity:kHeadersReadBuffer];
       dispatch_data_apply(buffer, ^bool(dispatch_data_t region, size_t offset, const void* buffer, size_t size) {
         [data appendBytes:buffer length:size];
         return true;
       });
       NSRange range = [data rangeOfData:_separatorData options:0 range:NSMakeRange(0, data.length)];
       if (range.location == NSNotFound) {
-        [self _readHeadersWithCompletionBlock:block];
+        if (CFHTTPMessageAppendBytes(_requestMessage, data.bytes, data.length)) {
+          [self _readHeadersWithCompletionBlock:block];
+        } else {
+          LOG_ERROR(@"Failed appending request headers data from socket %i", _socket);
+          block(nil);
+        }
       } else {
         NSUInteger length = range.location + range.length;
         if (CFHTTPMessageAppendBytes(_requestMessage, data.bytes, length)) {