瀏覽代碼

Merge pull request #255 from iosphere/check-range-location

Fix NSRangeException by checking range of NSTextCheckingResult
Pierre-Olivier Latour 9 年之前
父節點
當前提交
5f2877b85f
共有 1 個文件被更改,包括 6 次插入1 次删除
  1. 6 1
      GCDWebServer/Core/GCDWebServer.m

+ 6 - 1
GCDWebServer/Core/GCDWebServer.m

@@ -957,7 +957,12 @@ static inline NSString* _EncodeBase64(NSString* string) {
       for (NSTextCheckingResult* result in matches) {
         // Start at 1; index 0 is the whole string
         for (NSUInteger i = 1; i < result.numberOfRanges; i++) {
-          [captures addObject:[urlPath substringWithRange:[result rangeAtIndex:i]]];
+          NSRange range = [result rangeAtIndex:i];
+          // range is {NSNotFound, 0} "if one of the capture groups did not participate in this particular match"
+          // see discussion in -[NSRegularExpression firstMatchInString:options:range:]
+          if (range.location != NSNotFound) {
+            [captures addObject:[urlPath substringWithRange:range]];
+          }
         }
       }