summaryrefslogtreecommitdiffstats
path: root/net/base
diff options
context:
space:
mode:
authorserya@chromium.org <serya@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-09 08:35:07 +0000
committerserya@chromium.org <serya@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-09 08:35:07 +0000
commitd1f03e6741c66915b482cf15256a323f4b2ab3b0 (patch)
tree2593b5a29155ebae9e2754586f97818d76b6bde1 /net/base
parent41716639b97bc4d36e540c3fd5c7cd22ca823f03 (diff)
downloadchromium_src-d1f03e6741c66915b482cf15256a323f4b2ab3b0.zip
chromium_src-d1f03e6741c66915b482cf15256a323f4b2ab3b0.tar.gz
chromium_src-d1f03e6741c66915b482cf15256a323f4b2ab3b0.tar.bz2
Escaping file names correctly. Also fixed a crush in chromeos debug build while saving a web page.
BUG=chromium-os:13130 TEST=Save a file with special characters like '#', '&', '"'. Review URL: http://codereview.chromium.org/7057053 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@88510 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base')
-rw-r--r--net/base/escape.cc5
-rw-r--r--net/base/escape.h6
-rw-r--r--net/base/escape_unittest.cc7
3 files changed, 13 insertions, 5 deletions
diff --git a/net/base/escape.cc b/net/base/escape.cc
index 9f119d8..08eebfa 100644
--- a/net/base/escape.cc
+++ b/net/base/escape.cc
@@ -212,8 +212,9 @@ static const Charmap kUrlEscape(
0xffffffffL, 0xffffffffL, 0xffffffffL, 0xffffffffL
);
-std::string EscapeUrlEncodedData(const std::string& path) {
- return Escape(path, kUrlEscape, true);
+std::string EscapeUrlEncodedData(const std::string& path,
+ bool use_plus) {
+ return Escape(path, kUrlEscape, use_plus);
}
// non-7bit
diff --git a/net/base/escape.h b/net/base/escape.h
index 6590329..ee8fd05 100644
--- a/net/base/escape.h
+++ b/net/base/escape.h
@@ -21,8 +21,10 @@ NET_API std::string EscapePath(const std::string& path);
// Escape application/x-www-form-urlencoded content. This includes:
// non-printable, non-7bit, and (including space) ?>=<;+'&%$#"![\]^`{|}
-// Space is escaped as + and other special characters as %XX (hex).
-NET_API std::string EscapeUrlEncodedData(const std::string& path);
+// Space is escaped as + (if use_plus is true) and other special characters
+// as %XX (hex).
+NET_API std::string EscapeUrlEncodedData(const std::string& path,
+ bool use_plus);
// Escape all non-ASCII input.
NET_API std::string EscapeNonASCII(const std::string& input);
diff --git a/net/base/escape_unittest.cc b/net/base/escape_unittest.cc
index 5211fdf..90714d4 100644
--- a/net/base/escape_unittest.cc
+++ b/net/base/escape_unittest.cc
@@ -147,7 +147,7 @@ TEST(EscapeTest, EscapeUrlEncodedData) {
"\x02\n\x1d !\"#$%&'()*+,-./0123456789:;"
"<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"[\\]^_`abcdefghijklmnopqrstuvwxyz"
- "{|}~\x7f\x80\xff"),
+ "{|}~\x7f\x80\xff", true),
// Escaped
"%02%0A%1D+!%22%23%24%25%26%27()*%2B,-./0123456789:%3B"
"%3C%3D%3E%3F%40ABCDEFGHIJKLMNOPQRSTUVWXYZ"
@@ -155,6 +155,11 @@ TEST(EscapeTest, EscapeUrlEncodedData) {
"%7B%7C%7D~%7F%80%FF");
}
+TEST(EscapeTest, EscapeUrlEncodedDataSpace) {
+ ASSERT_EQ(EscapeUrlEncodedData("a b", true), "a+b");
+ ASSERT_EQ(EscapeUrlEncodedData("a b", false), "a%20b");
+}
+
TEST(EscapeTest, UnescapeURLComponentASCII) {
const UnescapeURLCaseASCII unescape_cases[] = {
{"", UnescapeRule::NORMAL, ""},