Chromium Code Reviews| Index: net/http/http_util_unittest.cc |
| diff --git a/net/http/http_util_unittest.cc b/net/http/http_util_unittest.cc |
| index 2b456605d703ae7c5c7bb178d7b64ce4165e7e31..a9593603dd9e9118adbeca4086b2527f93066e22 100644 |
| --- a/net/http/http_util_unittest.cc |
| +++ b/net/http/http_util_unittest.cc |
| @@ -249,6 +249,40 @@ TEST(HttpUtilTest, Unquote) { |
| EXPECT_STREQ("x\"", HttpUtil::Unquote("'x\"'").c_str()); |
| } |
| +TEST(HttpUtilTest, StrictUnquote) { |
| + std::string out; |
| + |
| + // Replace <backslash> " with ". |
| + EXPECT_TRUE(HttpUtil::StrictUnquote("\"xyz\\\"abc\"", &out)); |
| + EXPECT_STREQ("xyz\"abc", out.c_str()); |
| + |
| + // Replace <backslash> <backslash> with <backslash> |
| + EXPECT_TRUE(HttpUtil::StrictUnquote("\"xyz\\\\abc\"", &out)); |
| + EXPECT_STREQ("xyz\\abc", out.c_str()); |
| + EXPECT_TRUE(HttpUtil::StrictUnquote("\"xyz\\\\\\\\\\\\abc\"", &out)); |
| + EXPECT_STREQ("xyz\\\\\\abc", out.c_str()); |
| + |
| + // Replace <backslash> X with X |
| + EXPECT_TRUE(HttpUtil::StrictUnquote("\"xyz\\Xabc\"", &out)); |
| + EXPECT_STREQ("xyzXabc", out.c_str()); |
| + |
| + // Return false on unquoted inputs. |
| + EXPECT_FALSE(HttpUtil::StrictUnquote("X", &out)); |
| + |
| + // Return false on mismatched quotes. |
| + EXPECT_FALSE(HttpUtil::StrictUnquote("\"", &out)); |
| + EXPECT_FALSE(HttpUtil::StrictUnquote("\"xyz", &out)); |
| + EXPECT_FALSE(HttpUtil::StrictUnquote("\"abc'", &out)); |
| + |
| + // Return false on escaped terminal quote. |
| + EXPECT_FALSE(HttpUtil::StrictUnquote("\"abc\\\"", &out)); |
| + |
| + // Allow single quotes to act as quote marks. |
| + // Not part of RFC 2616. |
| + EXPECT_TRUE(HttpUtil::StrictUnquote("'x\"'", &out)); |
|
mmenke
2016/04/26 18:05:58
Suggest duplicating this test,but with single and
|
| + EXPECT_STREQ("x\"", out.c_str()); |
| +} |
|
mmenke
2016/04/26 18:05:58
Some more other suggested tests:
Minimal quoted s
|
| + |
| TEST(HttpUtilTest, Quote) { |
| EXPECT_STREQ("\"xyz\\\"abc\"", HttpUtil::Quote("xyz\"abc").c_str()); |
| @@ -1102,7 +1136,8 @@ TEST(HttpUtilTest, NameValuePairsIteratorOptionalValues) { |
| HttpUtil::NameValuePairsIterator values_required_parser( |
| data.begin(), data.end(), ';', |
| - HttpUtil::NameValuePairsIterator::VALUES_NOT_OPTIONAL); |
| + HttpUtil::NameValuePairsIterator::Values::NOT_OPTIONAL, |
| + HttpUtil::NameValuePairsIterator::Quotes::NOT_STRICT); |
| EXPECT_TRUE(values_required_parser.valid()); |
| ASSERT_NO_FATAL_FAILURE(CheckNextNameValuePair(&values_required_parser, true, |
| true, "alpha", "1")); |
| @@ -1111,7 +1146,8 @@ TEST(HttpUtilTest, NameValuePairsIteratorOptionalValues) { |
| HttpUtil::NameValuePairsIterator parser( |
| data.begin(), data.end(), ';', |
| - HttpUtil::NameValuePairsIterator::VALUES_OPTIONAL); |
| + HttpUtil::NameValuePairsIterator::Values::OPTIONAL, |
| + HttpUtil::NameValuePairsIterator::Quotes::NOT_STRICT); |
| EXPECT_TRUE(parser.valid()); |
| ASSERT_NO_FATAL_FAILURE( |
| @@ -1177,6 +1213,20 @@ TEST(HttpUtilTest, NameValuePairsIteratorMissingEndQuote) { |
| &parser, false, true, std::string(), std::string())); |
| } |
| +TEST(HttpUtilTest, NameValuePairsIteratorStrictQuotes) { |
| + std::string data = "foo=\"bar\"; name='value"; |
|
mmenke
2016/04/26 18:05:58
Also, shouldn't use mismatched quotes in this test
mmenke
2016/04/26 18:05:58
Could you also test a case with a missing end quot
Marijn Kruisselbrink
2016/04/27 01:49:50
This does in fact only fail in strict mode (the ex
mmenke
2016/04/27 04:02:40
Oops, sorry, misread the test - was thinking the f
|
| + HttpUtil::NameValuePairsIterator parser( |
| + data.begin(), data.end(), ';', |
| + HttpUtil::NameValuePairsIterator::Values::NOT_OPTIONAL, |
| + HttpUtil::NameValuePairsIterator::Quotes::STRICT); |
| + EXPECT_TRUE(parser.valid()); |
| + |
| + ASSERT_NO_FATAL_FAILURE( |
| + CheckNextNameValuePair(&parser, true, true, "foo", "bar")); |
| + ASSERT_NO_FATAL_FAILURE(CheckNextNameValuePair(&parser, false, false, |
| + std::string(), std::string())); |
| +} |
| + |
| TEST(HttpUtilTest, IsValidHeaderValueRFC7230) { |
| EXPECT_TRUE(HttpUtil::IsValidHeaderValueRFC7230("")); |