瀏覽代碼

Reject files greater than 4 GiB in 32 bit mode

Pierre-Olivier Latour 11 年之前
父節點
當前提交
295901c0b3
共有 1 個文件被更改,包括 7 次插入0 次删除
  1. 7 0
      GCDWebServer/Responses/GCDWebServerFileResponse.m

+ 7 - 0
GCDWebServer/Responses/GCDWebServerFileResponse.m

@@ -81,6 +81,13 @@ static inline NSDate* _NSDateFromTimeSpec(const struct timespec* t) {
     ARC_RELEASE(self);
     return nil;
   }
+#ifndef __LP64__
+  if (info.st_size >= (off_t)4294967295) {  // In 32 bit mode, we can't handle files greater than 4 GiBs (don't use "NSUIntegerMax" here to avoid potential unsigned to signed conversion issues)
+    DNOT_REACHED();
+    ARC_RELEASE(self);
+    return nil;
+  }
+#endif
   NSUInteger fileSize = (NSUInteger)info.st_size;
   
   BOOL hasByteRange = GCDWebServerIsValidByteRange(range);