mirror of
https://github.com/swisspol/GCDWebServer.git
synced 2026-02-11 00:00:07 +08:00
Added GCDWebServerNormalizePath() API
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
#import <GCDWebServers/GCDWebServers.h>
|
||||
#import <XCTest/XCTest.h>
|
||||
|
||||
#pragma clang diagnostic ignored "-Weverything" // Prevent "messaging to unqualified id" warnings
|
||||
|
||||
@interface Tests : XCTestCase
|
||||
@end
|
||||
|
||||
@@ -21,4 +23,21 @@
|
||||
XCTAssertNotNil(server);
|
||||
}
|
||||
|
||||
- (void)testPaths {
|
||||
XCTAssertEqualObjects(GCDWebServerNormalizePath(@""), @"");
|
||||
XCTAssertEqualObjects(GCDWebServerNormalizePath(@"/foo/"), @"/foo");
|
||||
XCTAssertEqualObjects(GCDWebServerNormalizePath(@"foo/bar"), @"foo/bar");
|
||||
XCTAssertEqualObjects(GCDWebServerNormalizePath(@"foo//bar"), @"foo/bar");
|
||||
XCTAssertEqualObjects(GCDWebServerNormalizePath(@"foo/bar//"), @"foo/bar");
|
||||
XCTAssertEqualObjects(GCDWebServerNormalizePath(@"foo/./bar"), @"foo/bar");
|
||||
XCTAssertEqualObjects(GCDWebServerNormalizePath(@"foo/bar/."), @"foo/bar");
|
||||
XCTAssertEqualObjects(GCDWebServerNormalizePath(@"foo/../bar"), @"bar");
|
||||
XCTAssertEqualObjects(GCDWebServerNormalizePath(@"/foo/../bar"), @"/bar");
|
||||
XCTAssertEqualObjects(GCDWebServerNormalizePath(@"/foo/.."), @"/");
|
||||
XCTAssertEqualObjects(GCDWebServerNormalizePath(@"/.."), @"/");
|
||||
XCTAssertEqualObjects(GCDWebServerNormalizePath(@"."), @"");
|
||||
XCTAssertEqualObjects(GCDWebServerNormalizePath(@".."), @"");
|
||||
XCTAssertEqualObjects(GCDWebServerNormalizePath(@"../.."), @"");
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -102,6 +102,11 @@ NSString* GCDWebServerFormatISO8601(NSDate* date);
|
||||
*/
|
||||
NSDate* _Nullable GCDWebServerParseISO8601(NSString* string);
|
||||
|
||||
/**
|
||||
* Removes "//", "/./" and "/../" components from path as well as any trailing slash.
|
||||
*/
|
||||
NSString* GCDWebServerNormalizePath(NSString* path);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -314,3 +314,18 @@ NSString* GCDWebServerComputeMD5Digest(NSString* format, ...) {
|
||||
buffer[2 * CC_MD5_DIGEST_LENGTH] = 0;
|
||||
return (NSString*)[NSString stringWithUTF8String:buffer];
|
||||
}
|
||||
|
||||
NSString* GCDWebServerNormalizePath(NSString* path) {
|
||||
NSMutableArray* components = [[NSMutableArray alloc] init];
|
||||
for (NSString* component in [path componentsSeparatedByString:@"/"]) {
|
||||
if ([component isEqualToString:@".."]) {
|
||||
[components removeLastObject];
|
||||
} else if (component.length && ![component isEqualToString:@"."]) {
|
||||
[components addObject:component];
|
||||
}
|
||||
}
|
||||
if (path.length && ([path characterAtIndex:0] == '/')) {
|
||||
return [@"/" stringByAppendingString:[components componentsJoinedByString:@"/"]]; // Preserve initial slash
|
||||
}
|
||||
return [components componentsJoinedByString:@"/"];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user