From 11967061a1655fddf00c6839e90d2f9e15a52cce Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Latour Date: Sun, 15 Mar 2020 09:24:27 -0700 Subject: [PATCH 1/7] Updated to Xcode 11 --- GCDWebServer.xcodeproj/project.pbxproj | 2 +- .../xcschemes/GCDWebServers (Mac).xcscheme | 10 +++------- .../xcschemes/GCDWebServers (iOS).xcscheme | 10 +++------- .../xcschemes/GCDWebServers (tvOS).xcscheme | 10 +++------- 4 files changed, 10 insertions(+), 22 deletions(-) diff --git a/GCDWebServer.xcodeproj/project.pbxproj b/GCDWebServer.xcodeproj/project.pbxproj index d4780d7..7ce499a 100644 --- a/GCDWebServer.xcodeproj/project.pbxproj +++ b/GCDWebServer.xcodeproj/project.pbxproj @@ -838,7 +838,7 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1030; + LastUpgradeCheck = 1130; TargetAttributes = { CEE28CD01AE004D800F4023C = { CreatedOnToolsVersion = 6.3; diff --git a/GCDWebServer.xcodeproj/xcshareddata/xcschemes/GCDWebServers (Mac).xcscheme b/GCDWebServer.xcodeproj/xcshareddata/xcschemes/GCDWebServers (Mac).xcscheme index aae0b64..f366881 100644 --- a/GCDWebServer.xcodeproj/xcshareddata/xcschemes/GCDWebServers (Mac).xcscheme +++ b/GCDWebServer.xcodeproj/xcshareddata/xcschemes/GCDWebServers (Mac).xcscheme @@ -1,6 +1,6 @@ + shouldUseLaunchSchemeArgsEnv = "YES" + enableAddressSanitizer = "YES"> @@ -40,8 +40,6 @@ - - - - - - - - + + - - - - - - + + - - Date: Sun, 15 Mar 2020 09:24:35 -0700 Subject: [PATCH 2/7] Fixed Clang build warning --- GCDWebServer/Core/GCDWebServerConnection.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GCDWebServer/Core/GCDWebServerConnection.m b/GCDWebServer/Core/GCDWebServerConnection.m index b48edc6..77a0896 100644 --- a/GCDWebServer/Core/GCDWebServerConnection.m +++ b/GCDWebServer/Core/GCDWebServerConnection.m @@ -795,7 +795,7 @@ static inline BOOL _CompareResources(NSString* responseETag, NSString* requestET GWS_DCHECK((statusCode >= 400) && (statusCode < 600)); [self _initializeResponseHeadersWithStatusCode:statusCode]; [self writeHeadersWithCompletionBlock:^(BOOL success) { - ; // Nothing more to do + // Nothing more to do }]; GWS_LOG_DEBUG(@"Connection aborted with status code %i on socket %i", (int)statusCode, _socket); } From a7a6cfdbc702edda8e17c04c6a3dfe208780791d Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Latour Date: Sun, 15 Mar 2020 09:26:52 -0700 Subject: [PATCH 3/7] Fixed Info.plist build warnings --- iOS/Info.plist | 2 +- tvOS/Info.plist | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/iOS/Info.plist b/iOS/Info.plist index 1f083fb..d052473 100644 --- a/iOS/Info.plist +++ b/iOS/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - net.pol-online.${PRODUCT_NAME:rfc1034identifier} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName diff --git a/tvOS/Info.plist b/tvOS/Info.plist index f0b6e5e..a887487 100644 --- a/tvOS/Info.plist +++ b/tvOS/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier - net.pol-online.${PRODUCT_NAME:rfc1034identifier} + $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName From 7720b1363daff48cbbb72ee9095ab4a12e2924eb Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Latour Date: Sun, 15 Mar 2020 09:30:51 -0700 Subject: [PATCH 4/7] Ignore deprecation warning for CC_MD5 on iOS 13+ and macOS 10.15+ Fixes #427 --- GCDWebServer/Core/GCDWebServerFunctions.m | 3 +++ 1 file changed, 3 insertions(+) diff --git a/GCDWebServer/Core/GCDWebServerFunctions.m b/GCDWebServer/Core/GCDWebServerFunctions.m index 7787884..c855556 100644 --- a/GCDWebServer/Core/GCDWebServerFunctions.m +++ b/GCDWebServer/Core/GCDWebServerFunctions.m @@ -302,7 +302,10 @@ NSString* GCDWebServerComputeMD5Digest(NSString* format, ...) { const char* string = [[[NSString alloc] initWithFormat:format arguments:arguments] UTF8String]; va_end(arguments); unsigned char md5[CC_MD5_DIGEST_LENGTH]; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" CC_MD5(string, (CC_LONG)strlen(string), md5); +#pragma clang diagnostic pop char buffer[2 * CC_MD5_DIGEST_LENGTH + 1]; for (int i = 0; i < CC_MD5_DIGEST_LENGTH; ++i) { unsigned char byte = md5[i]; From 45432e656382bc0499897f6911cabdc30206edd0 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Latour Date: Sun, 15 Mar 2020 09:31:50 -0700 Subject: [PATCH 5/7] Updated Travis CI to Xcode 11.3 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index e7b0d3a..ec96ae4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,3 @@ language: objective-c script: ./Run-Tests.sh -osx_image: xcode10.3 +osx_image: xcode11.3 From df8d66f6c879a6af682731a07dc788b8132aff18 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Latour Date: Sun, 15 Mar 2020 09:35:58 -0700 Subject: [PATCH 6/7] Formatted source --- GCDWebServer/Core/GCDWebServer.m | 108 +++++++++++---------- GCDWebServer/Core/GCDWebServerConnection.m | 4 +- Mac/main.m | 2 +- format-source.sh | 10 +- 4 files changed, 65 insertions(+), 59 deletions(-) diff --git a/GCDWebServer/Core/GCDWebServer.m b/GCDWebServer/Core/GCDWebServer.m index cb1b295..655b2bd 100644 --- a/GCDWebServer/Core/GCDWebServer.m +++ b/GCDWebServer/Core/GCDWebServer.m @@ -876,13 +876,14 @@ static inline NSString* _EncodeBase64(NSString* string) { } - (void)addDefaultHandlerForMethod:(NSString*)method requestClass:(Class)aClass asyncProcessBlock:(GCDWebServerAsyncProcessBlock)block { - [self addHandlerWithMatchBlock:^GCDWebServerRequest*(NSString* requestMethod, NSURL* requestURL, NSDictionary* requestHeaders, NSString* urlPath, NSDictionary* urlQuery) { - if (![requestMethod isEqualToString:method]) { - return nil; - } - return [(GCDWebServerRequest*)[aClass alloc] initWithMethod:requestMethod url:requestURL headers:requestHeaders path:urlPath query:urlQuery]; - } - asyncProcessBlock:block]; + [self + addHandlerWithMatchBlock:^GCDWebServerRequest*(NSString* requestMethod, NSURL* requestURL, NSDictionary* requestHeaders, NSString* urlPath, NSDictionary* urlQuery) { + if (![requestMethod isEqualToString:method]) { + return nil; + } + return [(GCDWebServerRequest*)[aClass alloc] initWithMethod:requestMethod url:requestURL headers:requestHeaders path:urlPath query:urlQuery]; + } + asyncProcessBlock:block]; } - (void)addHandlerForMethod:(NSString*)method path:(NSString*)path requestClass:(Class)aClass processBlock:(GCDWebServerProcessBlock)block { @@ -896,16 +897,17 @@ static inline NSString* _EncodeBase64(NSString* string) { - (void)addHandlerForMethod:(NSString*)method path:(NSString*)path requestClass:(Class)aClass asyncProcessBlock:(GCDWebServerAsyncProcessBlock)block { if ([path hasPrefix:@"/"] && [aClass isSubclassOfClass:[GCDWebServerRequest class]]) { - [self addHandlerWithMatchBlock:^GCDWebServerRequest*(NSString* requestMethod, NSURL* requestURL, NSDictionary* requestHeaders, NSString* urlPath, NSDictionary* urlQuery) { - if (![requestMethod isEqualToString:method]) { - return nil; - } - if ([urlPath caseInsensitiveCompare:path] != NSOrderedSame) { - return nil; - } - return [(GCDWebServerRequest*)[aClass alloc] initWithMethod:requestMethod url:requestURL headers:requestHeaders path:urlPath query:urlQuery]; - } - asyncProcessBlock:block]; + [self + addHandlerWithMatchBlock:^GCDWebServerRequest*(NSString* requestMethod, NSURL* requestURL, NSDictionary* requestHeaders, NSString* urlPath, NSDictionary* urlQuery) { + if (![requestMethod isEqualToString:method]) { + return nil; + } + if ([urlPath caseInsensitiveCompare:path] != NSOrderedSame) { + return nil; + } + return [(GCDWebServerRequest*)[aClass alloc] initWithMethod:requestMethod url:requestURL headers:requestHeaders path:urlPath query:urlQuery]; + } + asyncProcessBlock:block]; } else { GWS_DNOT_REACHED(); } @@ -923,34 +925,35 @@ static inline NSString* _EncodeBase64(NSString* string) { - (void)addHandlerForMethod:(NSString*)method pathRegex:(NSString*)regex requestClass:(Class)aClass asyncProcessBlock:(GCDWebServerAsyncProcessBlock)block { NSRegularExpression* expression = [NSRegularExpression regularExpressionWithPattern:regex options:NSRegularExpressionCaseInsensitive error:NULL]; if (expression && [aClass isSubclassOfClass:[GCDWebServerRequest class]]) { - [self addHandlerWithMatchBlock:^GCDWebServerRequest*(NSString* requestMethod, NSURL* requestURL, NSDictionary* requestHeaders, NSString* urlPath, NSDictionary* urlQuery) { - if (![requestMethod isEqualToString:method]) { - return nil; - } - - NSArray* matches = [expression matchesInString:urlPath options:0 range:NSMakeRange(0, urlPath.length)]; - if (matches.count == 0) { - return nil; - } - - NSMutableArray* captures = [NSMutableArray array]; - for (NSTextCheckingResult* result in matches) { - // Start at 1; index 0 is the whole string - for (NSUInteger i = 1; i < result.numberOfRanges; 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]]; + [self + addHandlerWithMatchBlock:^GCDWebServerRequest*(NSString* requestMethod, NSURL* requestURL, NSDictionary* requestHeaders, NSString* urlPath, NSDictionary* urlQuery) { + if (![requestMethod isEqualToString:method]) { + return nil; } - } - } - GCDWebServerRequest* request = [(GCDWebServerRequest*)[aClass alloc] initWithMethod:requestMethod url:requestURL headers:requestHeaders path:urlPath query:urlQuery]; - [request setAttribute:captures forKey:GCDWebServerRequestAttribute_RegexCaptures]; - return request; - } - asyncProcessBlock:block]; + NSArray* matches = [expression matchesInString:urlPath options:0 range:NSMakeRange(0, urlPath.length)]; + if (matches.count == 0) { + return nil; + } + + NSMutableArray* captures = [NSMutableArray array]; + for (NSTextCheckingResult* result in matches) { + // Start at 1; index 0 is the whole string + for (NSUInteger i = 1; i < result.numberOfRanges; 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]]; + } + } + } + + GCDWebServerRequest* request = [(GCDWebServerRequest*)[aClass alloc] initWithMethod:requestMethod url:requestURL headers:requestHeaders path:urlPath query:urlQuery]; + [request setAttribute:captures forKey:GCDWebServerRequestAttribute_RegexCaptures]; + return request; + } + asyncProcessBlock:block]; } else { GWS_DNOT_REACHED(); } @@ -1021,15 +1024,16 @@ static inline NSString* _EncodeBase64(NSString* string) { - (void)addGETHandlerForBasePath:(NSString*)basePath directoryPath:(NSString*)directoryPath indexFilename:(NSString*)indexFilename cacheAge:(NSUInteger)cacheAge allowRangeRequests:(BOOL)allowRangeRequests { if ([basePath hasPrefix:@"/"] && [basePath hasSuffix:@"/"]) { GCDWebServer* __unsafe_unretained server = self; - [self addHandlerWithMatchBlock:^GCDWebServerRequest*(NSString* requestMethod, NSURL* requestURL, NSDictionary* requestHeaders, NSString* urlPath, NSDictionary* urlQuery) { - if (![requestMethod isEqualToString:@"GET"]) { - return nil; - } - if (![urlPath hasPrefix:basePath]) { - return nil; - } - return [[GCDWebServerRequest alloc] initWithMethod:requestMethod url:requestURL headers:requestHeaders path:urlPath query:urlQuery]; - } + [self + addHandlerWithMatchBlock:^GCDWebServerRequest*(NSString* requestMethod, NSURL* requestURL, NSDictionary* requestHeaders, NSString* urlPath, NSDictionary* urlQuery) { + if (![requestMethod isEqualToString:@"GET"]) { + return nil; + } + if (![urlPath hasPrefix:basePath]) { + return nil; + } + return [[GCDWebServerRequest alloc] initWithMethod:requestMethod url:requestURL headers:requestHeaders path:urlPath query:urlQuery]; + } processBlock:^GCDWebServerResponse*(GCDWebServerRequest* request) { GCDWebServerResponse* response = nil; NSString* filePath = [directoryPath stringByAppendingPathComponent:GCDWebServerNormalizePath([request.path substringFromIndex:basePath.length])]; diff --git a/GCDWebServer/Core/GCDWebServerConnection.m b/GCDWebServer/Core/GCDWebServerConnection.m index 77a0896..5740794 100644 --- a/GCDWebServer/Core/GCDWebServerConnection.m +++ b/GCDWebServer/Core/GCDWebServerConnection.m @@ -794,8 +794,8 @@ static inline BOOL _CompareResources(NSString* responseETag, NSString* requestET GWS_DCHECK(_responseMessage == NULL); GWS_DCHECK((statusCode >= 400) && (statusCode < 600)); [self _initializeResponseHeadersWithStatusCode:statusCode]; - [self writeHeadersWithCompletionBlock:^(BOOL success) { - // Nothing more to do + [self writeHeadersWithCompletionBlock:^(BOOL success){ + // Nothing more to do }]; GWS_LOG_DEBUG(@"Connection aborted with status code %i on socket %i", (int)statusCode, _socket); } diff --git a/Mac/main.m b/Mac/main.m index 9bcf013..7a4d5b0 100644 --- a/Mac/main.m +++ b/Mac/main.m @@ -380,7 +380,7 @@ int main(int argc, const char* argv[]) { webServer.delegate = delegate; #endif fprintf(stdout, "\n\n", [testDirectory UTF8String]); - result = (int)[webServer runTestsWithOptions:@{ GCDWebServerOption_Port : @8080 } inDirectory:testDirectory]; + result = (int)[webServer runTestsWithOptions:@{GCDWebServerOption_Port : @8080} inDirectory:testDirectory]; } else { webServer.delegate = delegate; if (recording) { diff --git a/format-source.sh b/format-source.sh index 4c35aa7..027ce7e 100755 --- a/format-source.sh +++ b/format-source.sh @@ -2,17 +2,19 @@ # brew install clang-format +SWIFT_FORMAT_VERSION='0.44.5' + CLANG_FORMAT_VERSION=`clang-format -version | awk '{ print $3 }'` -if [[ "$CLANG_FORMAT_VERSION" != "7.0.0" ]]; then +if [[ "$CLANG_FORMAT_VERSION" != "9.0.0" ]]; then echo "Unsupported clang-format version" exit 1 fi if [[ ! -f "build/swiftformat" ]]; then mkdir -p "build" - curl -sfL -o "build/SwiftFormat.zip" "https://github.com/nicklockwood/SwiftFormat/archive/0.37.2.zip" - unzip "build/SwiftFormat.zip" "SwiftFormat-0.37.2/CommandLineTool/swiftformat" -d "build" - mv "build/SwiftFormat-0.37.2/CommandLineTool/swiftformat" "build/swiftformat" + curl -sfL -o "build/SwiftFormat.zip" "https://github.com/nicklockwood/SwiftFormat/archive/$SWIFT_FORMAT_VERSION.zip" + unzip "build/SwiftFormat.zip" "SwiftFormat-$SWIFT_FORMAT_VERSION/CommandLineTool/swiftformat" -d "build" + mv "build/SwiftFormat-$SWIFT_FORMAT_VERSION/CommandLineTool/swiftformat" "build/swiftformat" fi pushd "GCDWebServer/Core" From 1c36bf07c848476111d523057a3a63b05328ce2a Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Latour Date: Sun, 15 Mar 2020 09:40:36 -0700 Subject: [PATCH 7/7] Bumped version --- GCDWebServer.podspec | 2 +- GCDWebServer.xcodeproj/project.pbxproj | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/GCDWebServer.podspec b/GCDWebServer.podspec index 1389f17..615222d 100644 --- a/GCDWebServer.podspec +++ b/GCDWebServer.podspec @@ -7,7 +7,7 @@ Pod::Spec.new do |s| s.name = 'GCDWebServer' - s.version = '3.5.3' + s.version = '3.5.4' s.author = { 'Pierre-Olivier Latour' => 'info@pol-online.net' } s.license = { :type => 'BSD', :file => 'LICENSE' } s.homepage = 'https://github.com/swisspol/GCDWebServer' diff --git a/GCDWebServer.xcodeproj/project.pbxproj b/GCDWebServer.xcodeproj/project.pbxproj index 7ce499a..7a7d118 100644 --- a/GCDWebServer.xcodeproj/project.pbxproj +++ b/GCDWebServer.xcodeproj/project.pbxproj @@ -1165,7 +1165,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - BUNDLE_VERSION_STRING = 3.5.2; + BUNDLE_VERSION_STRING = 3.5.4; CLANG_ENABLE_OBJC_ARC = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -1206,7 +1206,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; - BUNDLE_VERSION_STRING = 3.5.2; + BUNDLE_VERSION_STRING = 3.5.4; CLANG_ENABLE_OBJC_ARC = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_PREPROCESSOR_DEFINITIONS_NOT_USED_IN_PRECOMPS = __GCDWEBSERVER_ENABLE_TESTING__;