Chromium Code Reviews| Index: pkg/http_server/lib/src/virtual_directory.dart | 
| diff --git a/pkg/http_server/lib/src/virtual_directory.dart b/pkg/http_server/lib/src/virtual_directory.dart | 
| index 6eef0b4208b3811dee2e362d8612e4fd200bea9f..a5aed2466c7398eba7360df5b523d772e821a6c0 100644 | 
| --- a/pkg/http_server/lib/src/virtual_directory.dart | 
| +++ b/pkg/http_server/lib/src/virtual_directory.dart | 
| @@ -255,16 +255,17 @@ class VirtualDirectory { | 
| } | 
| response.headers.set(HttpHeaders.LAST_MODIFIED, stats.modified); | 
| - var path = request.uri.path; | 
| + var path = Uri.decodeComponent(request.uri.path); | 
| + var encodedPath = new HtmlEscape().convert(path); | 
| var header = | 
| '''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | 
| http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | 
| <html xmlns="http://www.w3.org/1999/xhtml"> | 
| <head> | 
| -<title>Index of $path</title> | 
| +<title>Index of $encodedPath</title> | 
| </head> | 
| <body> | 
| -<h1>Index of $path</h1> | 
| +<h1>Index of $encodedPath</h1> | 
| <table> | 
| <tr> | 
| <td>Name</td> | 
| @@ -286,10 +287,13 @@ $server | 
| void add(String name, String modified, var size) { | 
| if (size == null) size = "-"; | 
| if (modified == null) modified = ""; | 
| - var p = normalize(join(path, name)); | 
| + var encodedLink = new HtmlEscape(HtmlEscapeMode.ATTRIBUTE) | 
| + .convert(Uri.encodeComponent(normalize(join(path, name)))); | 
| + var encodedName = new HtmlEscape().convert(name); | 
| + | 
| var entry = | 
| ''' <tr> | 
| - <td><a href="$p">$name</a></td> | 
| + <td><a href="$encodedLink">$encodedName</a></td> | 
| <td>$modified</td> | 
| 
 
nweiz
2014/04/04 18:06:37
Escape [modified] as well. Even though it doesn't
 
Anders Johnsen
2014/04/07 07:03:08
Done.
 
 | 
| <td style="text-align: right">$size</td> | 
| </tr>'''; | 
| @@ -331,7 +335,8 @@ $server | 
| return; | 
| } | 
| // Default error page. | 
| - var path = request.uri.path; | 
| + var path = Uri.decodeComponent(request.uri.path); | 
| + var encodedPath = new HtmlEscape().convert(path); | 
| var reason = response.reasonPhrase; | 
| var server = response.headers.value(HttpHeaders.SERVER); | 
| @@ -341,10 +346,10 @@ $server | 
| http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | 
| <html xmlns="http://www.w3.org/1999/xhtml"> | 
| <head> | 
| -<title>$reason: $path</title> | 
| +<title>$reason: $encodedPath</title> | 
| </head> | 
| <body> | 
| -<h1>Error $error at \'$path\': $reason</h1> | 
| +<h1>Error $error at \'$encodedPath\': $reason</h1> | 
| 
 
nweiz
2014/04/04 18:06:37
Escape [error] and [reason].
 
Anders Johnsen
2014/04/07 07:03:08
Done.
 
 | 
| $server | 
| </body> | 
| </html>'''; |