diff options
author | brg@chromium.com <brg@chromium.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-01 09:19:29 +0000 |
---|---|---|
committer | brg@chromium.com <brg@chromium.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-01 09:19:29 +0000 |
commit | 74f91ef92514a6820aaeed1d312eaa8155d33149 (patch) | |
tree | 052a28e64c0c37f9da81d3bd374d1890dd100046 /net | |
parent | f571579df454f8d59a783afaf008781e84fb8351 (diff) | |
download | chromium_src-74f91ef92514a6820aaeed1d312eaa8155d33149.zip chromium_src-74f91ef92514a6820aaeed1d312eaa8155d33149.tar.gz chromium_src-74f91ef92514a6820aaeed1d312eaa8155d33149.tar.bz2 |
Add EscapeURL to the ASCII escape methods.EscapeURL escapes all forbidden ascii characters in an URL and repalces spaces with '+'.
Test=Escape.EscapeUrl
BUG=23029
Review URL: http://codereview.chromium.org/244056
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@27713 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net')
-rw-r--r-- | net/base/escape.cc | 10 | ||||
-rw-r--r-- | net/base/escape.h | 7 | ||||
-rw-r--r-- | net/base/escape_unittest.cc | 15 |
3 files changed, 31 insertions, 1 deletions
diff --git a/net/base/escape.cc b/net/base/escape.cc index f836afb6..18b2e0b 100644 --- a/net/base/escape.cc +++ b/net/base/escape.cc @@ -186,6 +186,16 @@ std::string EscapePath(const std::string& path) { return Escape(path, kPathCharmap, false); } +// non-printable, non-7bit, and (including space) ?>=<;+'&%$#"![\]^`{|} +static const Charmap kUrlEscape( + 0xffffffffL, 0xf80008fdL, 0x78000001L, 0xb8000001L, + 0xffffffffL, 0xffffffffL, 0xffffffffL, 0xffffffffL +); + +std::string EscapeUrl(const std::string& path) { + return Escape(path, kUrlEscape, true); +} + // non-7bit static const Charmap kNonASCIICharmap( 0x00000000L, 0x00000000L, 0x00000000L, 0x00000000L, diff --git a/net/base/escape.h b/net/base/escape.h index 17f8646..597755f 100644 --- a/net/base/escape.h +++ b/net/base/escape.h @@ -11,10 +11,15 @@ // Escaping -------------------------------------------------------------------- -// Escape a file or url path. This includes: +// Escape a file. This includes: // non-printable, non-7bit, and (including space) "#%:<>?[\]^`{|} std::string EscapePath(const std::string& path); +// Escape an url. This includes: +// non-printable, non-7bit, and (including space) ?>=<;+'&%$#"![\]^`{|} +// Space is escaped as + and other special characters as %XX (hex). +std::string EscapeUrl(const std::string& path); + // Escape all non-ASCII input. std::string EscapeNonASCII(const std::string& input); diff --git a/net/base/escape_unittest.cc b/net/base/escape_unittest.cc index 8c31d41..6601edc 100644 --- a/net/base/escape_unittest.cc +++ b/net/base/escape_unittest.cc @@ -107,6 +107,21 @@ TEST(Escape, EscapePath) { "%7B%7C%7D~%7F%80%FF"); } +TEST(Escape, EscapeUrl) { + ASSERT_EQ( + // Most of the character space we care about, un-escaped + EscapeUrl( + "\x02\n\x1d !\"#$%&'()*+,-./0123456789:;" + "<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "[\\]^_`abcdefghijklmnopqrstuvwxyz" + "{|}~\x7f\x80\xff"), + // Escaped + "%02%0A%1D+!%22%23%24%25%26%27()*%2B,-./0123456789:%3B" + "%3C%3D%3E%3F%40ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "%5B%5C%5D%5E_%60abcdefghijklmnopqrstuvwxyz" + "%7B%7C%7D~%7F%80%FF"); +} + TEST(Escape, UnescapeURLComponent) { const UnescapeURLCase unescape_cases[] = { {"", UnescapeRule::NORMAL, ""}, |