Chromium Code Reviews| Index: pkg/http_server/test/virtual_directory_test.dart |
| diff --git a/pkg/http_server/test/virtual_directory_test.dart b/pkg/http_server/test/virtual_directory_test.dart |
| index ca7094883dc8ac1975a6414cc4030a6d1bf1fa53..3fdf8407eeba09c1d9c797c32ff5b790e016c170 100644 |
| --- a/pkg/http_server/test/virtual_directory_test.dart |
| +++ b/pkg/http_server/test/virtual_directory_test.dart |
| @@ -476,5 +476,99 @@ void main() { |
| }), completion(equals('my-page 404'))); |
| }); |
| }); |
| + |
| + group('escape-root', () { |
| + test('escape1', () { |
| + expect(HttpServer.bind('localhost', 0).then((server) { |
| + var dir = new Directory('').createTempSync(); |
| + var virDir = new VirtualDirectory(dir.path); |
| + virDir.allowDirectoryListing = true; |
| + |
| + virDir.serve(server); |
| + |
| + return getStatusCode(server.port, '/../') |
| + .whenComplete(() { |
| + server.close(); |
| + dir.deleteSync(); |
| + }); |
| + }), completion(equals(HttpStatus.NOT_FOUND))); |
| + }); |
| + |
| + test('escape2', () { |
| + expect(HttpServer.bind('localhost', 0).then((server) { |
| + var dir = new Directory('').createTempSync(); |
| + new Directory('${dir.path}/dir').createSync(); |
| + var virDir = new VirtualDirectory(dir.path); |
| + virDir.allowDirectoryListing = true; |
| + |
| + virDir.serve(server); |
| + |
| + return getStatusCode(server.port, '/dir/../../') |
| + .whenComplete(() { |
| + server.close(); |
| + dir.deleteSync(recursive: true); |
| + }); |
| + }), completion(equals(HttpStatus.NOT_FOUND))); |
| + }); |
| + }); |
| + |
| + group('url-decode', () { |
| + test('with-space', () { |
| + expect(HttpServer.bind('localhost', 0).then((server) { |
| + var dir = new Directory('').createTempSync(); |
| + var file = new File('${dir.path}/my file')..createSync(); |
| + var virDir = new VirtualDirectory(dir.path); |
| + |
| + virDir.serve(server); |
| + |
| + return getStatusCode(server.port, '/my file') |
| + .whenComplete(() { |
| + server.close(); |
| + dir.deleteSync(recursive: true); |
| + }); |
| + }), completion(equals(HttpStatus.OK))); |
| + }); |
| + |
| + test('encoded-space', () { |
| + expect(HttpServer.bind('localhost', 0).then((server) { |
| + var dir = new Directory('').createTempSync(); |
| + var file = new File('${dir.path}/my file')..createSync(); |
| + var virDir = new VirtualDirectory(dir.path); |
| + |
| + virDir.serve(server); |
| + |
| + return getStatusCode(server.port, '/my%20file') |
| + .whenComplete(() { |
| + server.close(); |
| + dir.deleteSync(recursive: true); |
| + }); |
| + }), completion(equals(HttpStatus.NOT_FOUND))); |
| + }); |
| + |
| + testEncoding(name, expected, [bool create = true]) { |
| + test('encode-$name', () { |
| + expect(HttpServer.bind('localhost', 0).then((server) { |
| + var dir = new Directory('').createTempSync(); |
| + if (create) new File('${dir.path}/$name').createSync(); |
| + var virDir = new VirtualDirectory(dir.path); |
| + virDir.allowDirectoryListing = true; |
| + |
| + virDir.serve(server); |
| + |
| + return getStatusCode(server.port, '/$name') |
| + .whenComplete(() { |
| + server.close(); |
| + dir.deleteSync(recursive: true); |
| + }); |
| + }), completion(equals(expected))); |
| + }); |
| + } |
| + testEncoding('..', HttpStatus.NOT_FOUND, false); |
| + testEncoding('%2e%2e', HttpStatus.OK); |
| + testEncoding('%252e%252e', HttpStatus.OK); |
| + testEncoding('/', HttpStatus.OK, false); |
| + testEncoding('%2f', HttpStatus.NOT_FOUND, false); |
| + testEncoding('%2f', HttpStatus.OK, true); |
|
Lasse Reichstein Nielsen
2013/07/02 07:31:14
So you are successfully creating a file called "%2
Anders Johnsen
2013/07/02 11:08:07
Done.
|
| + }); |
| } |