From f1e9f1a37c670d77f7b581cbc01e416b574fa4b1 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Latour Date: Fri, 19 Sep 2014 08:19:49 -0700 Subject: [PATCH] Improved handling of symbolic links in -addGETHandlerForBasePath:directoryPath:indexFilename:cacheAge:allowRangeRequests: --- GCDWebServer/Core/GCDWebServer.m | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/GCDWebServer/Core/GCDWebServer.m b/GCDWebServer/Core/GCDWebServer.m index 9c1afa8..a18b11f 100644 --- a/GCDWebServer/Core/GCDWebServer.m +++ b/GCDWebServer/Core/GCDWebServer.m @@ -882,17 +882,18 @@ static inline NSString* _EncodeBase64(NSString* string) { GCDWebServerResponse* response = nil; NSString* filePath = [directoryPath stringByAppendingPathComponent:[request.path substringFromIndex:basePath.length]]; - BOOL isDirectory; - if ([[NSFileManager defaultManager] fileExistsAtPath:filePath isDirectory:&isDirectory]) { - if (isDirectory) { + NSString* fileType = [[[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:NULL] fileType]; + if (fileType) { + if ([fileType isEqualToString:NSFileTypeDirectory]) { if (indexFilename) { NSString* indexPath = [filePath stringByAppendingPathComponent:indexFilename]; - if ([[NSFileManager defaultManager] fileExistsAtPath:indexPath isDirectory:&isDirectory] && !isDirectory) { + NSString* indexType = [[[NSFileManager defaultManager] attributesOfItemAtPath:indexPath error:NULL] fileType]; + if ([indexType isEqualToString:NSFileTypeRegular]) { return [GCDWebServerFileResponse responseWithFile:indexPath]; } } response = [server _responseWithContentsOfDirectory:filePath]; - } else { + } else if ([fileType isEqualToString:NSFileTypeRegular]) { if (allowRangeRequests) { response = [GCDWebServerFileResponse responseWithFile:filePath byteRange:request.byteRange]; [response setValue:@"bytes" forAdditionalHeader:@"Accept-Ranges"];