Skip to content

Commit 0273843

Browse files
committed
Enforce hidden and extensions restrictions when moving and copying files in uploaders
Fixes swisspol#433
1 parent c9563db commit 0273843

2 files changed

Lines changed: 16 additions & 6 deletions

File tree

GCDWebDAVServer/GCDWebDAVServer.m

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -358,9 +358,14 @@ - (GCDWebServerResponse*)performCOPY:(GCDWebServerRequest*)request isMove:(BOOL)
358358
return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Conflict message:@"Invalid destination \"%@\"", dstRelativePath];
359359
}
360360

361-
NSString* itemName = [dstAbsolutePath lastPathComponent];
362-
if ((!_allowHiddenItems && [itemName hasPrefix:@"."]) || (!isDirectory && ![self _checkFileExtension:itemName])) {
363-
return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden message:@"%@ to item name \"%@\" is not allowed", isMove ? @"Moving" : @"Copying", itemName];
361+
NSString* srcName = [srcAbsolutePath lastPathComponent];
362+
if ((!_allowHiddenItems && [srcName hasPrefix:@"."]) || (!isDirectory && ![self _checkFileExtension:srcName])) {
363+
return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden message:@"%@ from item name \"%@\" is not allowed", isMove ? @"Moving" : @"Copying", srcName];
364+
}
365+
366+
NSString* dstName = [dstAbsolutePath lastPathComponent];
367+
if ((!_allowHiddenItems && [dstName hasPrefix:@"."]) || (!isDirectory && ![self _checkFileExtension:dstName])) {
368+
return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden message:@"%@ to item name \"%@\" is not allowed", isMove ? @"Moving" : @"Copying", dstName];
364369
}
365370

366371
NSString* overwriteHeader = [request.headers objectForKey:@"Overwrite"];

GCDWebUploader/GCDWebUploader.m

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -325,12 +325,17 @@ - (GCDWebServerResponse*)moveItem:(GCDWebServerURLEncodedFormRequest*)request {
325325
return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_NotFound message:@"\"%@\" does not exist", oldRelativePath];
326326
}
327327

328+
NSString* oldItemName = [oldAbsolutePath lastPathComponent];
329+
if ((!_allowHiddenItems && [oldItemName hasPrefix:@"."]) || (!isDirectory && ![self _checkFileExtension:oldItemName])) {
330+
return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden message:@"Moving from item name \"%@\" is not allowed", oldItemName];
331+
}
332+
328333
NSString* newRelativePath = [request.arguments objectForKey:@"newPath"];
329334
NSString* newAbsolutePath = [self _uniquePathForPath:[_uploadDirectory stringByAppendingPathComponent:GCDWebServerNormalizePath(newRelativePath)]];
330335

331-
NSString* itemName = [newAbsolutePath lastPathComponent];
332-
if ((!_allowHiddenItems && [itemName hasPrefix:@"."]) || (!isDirectory && ![self _checkFileExtension:itemName])) {
333-
return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden message:@"Moving to item name \"%@\" is not allowed", itemName];
336+
NSString* newItemName = [newAbsolutePath lastPathComponent];
337+
if ((!_allowHiddenItems && [newItemName hasPrefix:@"."]) || (!isDirectory && ![self _checkFileExtension:newItemName])) {
338+
return [GCDWebServerErrorResponse responseWithClientError:kGCDWebServerHTTPStatusCode_Forbidden message:@"Moving to item name \"%@\" is not allowed", newItemName];
334339
}
335340

336341
if (![self shouldMoveItemFromPath:oldAbsolutePath toPath:newAbsolutePath]) {

0 commit comments

Comments
 (0)