Fix UU_REPLACE_PLUS_WITH_SPACE value to match Chromium (fixes issue #2904)

This commit is contained in:
Andy Tzeng 2020-04-02 21:16:52 +00:00 committed by Marshall Greenblatt
parent a5de549456
commit 261a8899fc
2 changed files with 19 additions and 12 deletions

View File

@ -2303,21 +2303,10 @@ typedef enum {
/// ///
UU_URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS = 1 << 3, UU_URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS = 1 << 3,
///
// Unescapes characters that can be used in spoofing attempts (such as LOCK)
// and control characters (such as BiDi control characters and %01). This
// INCLUDES NULLs. This is used for rare cases such as data: URL decoding
// where the result is binary data.
//
// DO NOT use UU_SPOOFING_AND_CONTROL_CHARS if the URL is going to be
// displayed in the UI for security reasons.
///
UU_SPOOFING_AND_CONTROL_CHARS = 1 << 4,
/// ///
// URL queries use "+" for space. This flag controls that replacement. // URL queries use "+" for space. This flag controls that replacement.
/// ///
UU_REPLACE_PLUS_WITH_SPACE = 1 << 5, UU_REPLACE_PLUS_WITH_SPACE = 1 << 4,
} cef_uri_unescape_rule_t; } cef_uri_unescape_rule_t;
/// ///

View File

@ -329,6 +329,13 @@ TEST(ParserTest, URIEncode) {
EXPECT_STREQ(test_str_encoded.c_str(), encoded_value.ToString().c_str()); EXPECT_STREQ(test_str_encoded.c_str(), encoded_value.ToString().c_str());
} }
TEST(ParserTest, URIEncodeWithPlusSpace) {
const std::string& test_str_decoded = "A test string=";
const std::string& test_str_encoded = "A+test+string%3D";
const CefString& encoded_value = CefURIEncode(test_str_decoded, true);
EXPECT_STREQ(test_str_encoded.c_str(), encoded_value.ToString().c_str());
}
TEST(ParserTest, URIDecode) { TEST(ParserTest, URIDecode) {
const std::string& test_str_decoded = "A test string="; const std::string& test_str_decoded = "A test string=";
const std::string& test_str_encoded = "A%20test%20string%3D"; const std::string& test_str_encoded = "A%20test%20string%3D";
@ -339,6 +346,17 @@ TEST(ParserTest, URIDecode) {
EXPECT_STREQ(test_str_decoded.c_str(), decoded_value.ToString().c_str()); EXPECT_STREQ(test_str_decoded.c_str(), decoded_value.ToString().c_str());
} }
TEST(ParserTest, URIDecodeWithPlusSpace) {
const std::string& test_str_decoded = "A test string=";
const std::string& test_str_encoded = "A+test+string%3D";
const CefString& decoded_value =
CefURIDecode(test_str_encoded, false,
static_cast<cef_uri_unescape_rule_t>(
UU_SPACES | UU_URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS |
UU_REPLACE_PLUS_WITH_SPACE));
EXPECT_STREQ(test_str_decoded.c_str(), decoded_value.ToString().c_str());
}
TEST(ParserTest, ParseJSONInvalid) { TEST(ParserTest, ParseJSONInvalid) {
const char data[] = "This is my test data"; const char data[] = "This is my test data";
CefRefPtr<CefValue> value = CefParseJSON(data, JSON_PARSER_RFC); CefRefPtr<CefValue> value = CefParseJSON(data, JSON_PARSER_RFC);