| Index: net/base/escape_unittest.cc
|
| diff --git a/net/base/escape_unittest.cc b/net/base/escape_unittest.cc
|
| index cec7f32d1e5e49fd4a10ba6df3dc2c6f2d7ca4be..b828d80b5fe391e6dac617749e83733b12945f22 100644
|
| --- a/net/base/escape_unittest.cc
|
| +++ b/net/base/escape_unittest.cc
|
| @@ -150,43 +150,55 @@ TEST(EscapeTest, EscapeUrlEncodedDataSpace) {
|
|
|
| TEST(EscapeTest, UnescapeURLComponentASCII) {
|
| const UnescapeURLCaseASCII unescape_cases[] = {
|
| - {"", UnescapeRule::NORMAL, ""},
|
| - {"%2", UnescapeRule::NORMAL, "%2"},
|
| - {"%%%%%%", UnescapeRule::NORMAL, "%%%%%%"},
|
| - {"Don't escape anything", UnescapeRule::NORMAL, "Don't escape anything"},
|
| - {"Invalid %escape %2", UnescapeRule::NORMAL, "Invalid %escape %2"},
|
| - {"Some%20random text %25%2dOK", UnescapeRule::NONE,
|
| - "Some%20random text %25%2dOK"},
|
| - {"Some%20random text %25%2dOK", UnescapeRule::NORMAL,
|
| - "Some%20random text %25-OK"},
|
| - {"Some%20random text %25%2dOK", UnescapeRule::SPACES,
|
| - "Some random text %25-OK"},
|
| - {"Some%20random text %25%2dOK", UnescapeRule::URL_SPECIAL_CHARS,
|
| - "Some%20random text %-OK"},
|
| - {"Some%20random text %25%2dOK",
|
| - UnescapeRule::SPACES | UnescapeRule::URL_SPECIAL_CHARS,
|
| - "Some random text %-OK"},
|
| - {"%A0%B1%C2%D3%E4%F5", UnescapeRule::NORMAL, "\xA0\xB1\xC2\xD3\xE4\xF5"},
|
| - {"%Aa%Bb%Cc%Dd%Ee%Ff", UnescapeRule::NORMAL, "\xAa\xBb\xCc\xDd\xEe\xFf"},
|
| - // Certain URL-sensitive characters should not be unescaped unless asked.
|
| - {"Hello%20%13%10world %23# %3F? %3D= %26& %25% %2B+", UnescapeRule::SPACES,
|
| - "Hello %13%10world %23# %3F? %3D= %26& %25% %2B+"},
|
| - {"Hello%20%13%10world %23# %3F? %3D= %26& %25% %2B+",
|
| - UnescapeRule::URL_SPECIAL_CHARS,
|
| - "Hello%20%13%10world ## ?? == && %% ++"},
|
| - // We can neither escape nor unescape '@' since some websites expect it to
|
| - // be preserved as either '@' or "%40".
|
| - // See http://b/996720 and http://crbug.com/23933 .
|
| - {"me@my%40example", UnescapeRule::NORMAL, "me@my%40example"},
|
| - // Control characters.
|
| - {"%01%02%03%04%05%06%07%08%09 %25", UnescapeRule::URL_SPECIAL_CHARS,
|
| - "%01%02%03%04%05%06%07%08%09 %"},
|
| - {"%01%02%03%04%05%06%07%08%09 %25",
|
| - UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| - "\x01\x02\x03\x04\x05\x06\x07\x08\x09 %25"},
|
| - {"Hello%20%13%10%02", UnescapeRule::SPACES, "Hello %13%10%02"},
|
| - {"Hello%20%13%10%02", UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| - "Hello%20\x13\x10\x02"},
|
| + {"", UnescapeRule::NORMAL, ""},
|
| + {"%2", UnescapeRule::NORMAL, "%2"},
|
| + {"%%%%%%", UnescapeRule::NORMAL, "%%%%%%"},
|
| + {"Don't escape anything", UnescapeRule::NORMAL, "Don't escape anything"},
|
| + {"Invalid %escape %2", UnescapeRule::NORMAL, "Invalid %escape %2"},
|
| + {"Some%20random text %25%2dOK", UnescapeRule::NONE,
|
| + "Some%20random text %25%2dOK"},
|
| + {"Some%20random text %25%2dOK", UnescapeRule::NORMAL,
|
| + "Some%20random text %25-OK"},
|
| + {"Some%20random text %25%2dOK", UnescapeRule::SPACES,
|
| + "Some random text %25-OK"},
|
| + {"Some%20random text %25%2dOK", UnescapeRule::PATH_SEPARATORS,
|
| + "Some%20random text %25-OK"},
|
| + {"Some%20random text %25%2dOK",
|
| + UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS,
|
| + "Some%20random text %-OK"},
|
| + {"Some%20random text %25%2dOK",
|
| + UnescapeRule::SPACES |
|
| + UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS,
|
| + "Some random text %-OK"},
|
| + {"%A0%B1%C2%D3%E4%F5", UnescapeRule::NORMAL, "\xA0\xB1\xC2\xD3\xE4\xF5"},
|
| + {"%Aa%Bb%Cc%Dd%Ee%Ff", UnescapeRule::NORMAL, "\xAa\xBb\xCc\xDd\xEe\xFf"},
|
| + // Certain URL-sensitive characters should not be unescaped unless asked.
|
| + {"Hello%20%13%10world %23# %3F? %3D= %26& %25% %2B+",
|
| + UnescapeRule::SPACES, "Hello %13%10world %23# %3F? %3D= %26& %25% %2B+"},
|
| + {"Hello%20%13%10world %23# %3F? %3D= %26& %25% %2B+",
|
| + UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS,
|
| + "Hello%20%13%10world ## ?? == && %% ++"},
|
| + // We can neither escape nor unescape '@' since some websites expect it to
|
| + // be preserved as either '@' or "%40".
|
| + // See http://b/996720 and http://crbug.com/23933 .
|
| + {"me@my%40example", UnescapeRule::NORMAL, "me@my%40example"},
|
| + // Control characters.
|
| + {"%01%02%03%04%05%06%07%08%09 %25",
|
| + UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS,
|
| + "%01%02%03%04%05%06%07%08%09 %"},
|
| + {"%01%02%03%04%05%06%07%08%09 %25",
|
| + UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| + "\x01\x02\x03\x04\x05\x06\x07\x08\x09 %25"},
|
| + {"Hello%20%13%10%02", UnescapeRule::SPACES, "Hello %13%10%02"},
|
| + {"Hello%20%13%10%02", UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| + "Hello%20\x13\x10\x02"},
|
| +
|
| + // '/' and '\\' should only be unescaped by PATH_SEPARATORS.
|
| + {"%2F%5C", UnescapeRule::PATH_SEPARATORS, "/\\"},
|
| + {"%2F%5C", UnescapeRule::SPACES |
|
| + UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS |
|
| + UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| + "%2F%5C"},
|
| };
|
|
|
| for (size_t i = 0; i < arraysize(unescape_cases); i++) {
|
| @@ -218,126 +230,135 @@ TEST(EscapeTest, UnescapeURLComponentASCII) {
|
|
|
| TEST(EscapeTest, UnescapeURLComponent) {
|
| const UnescapeURLCase unescape_cases[] = {
|
| - {L"", UnescapeRule::NORMAL, L""},
|
| - {L"%2", UnescapeRule::NORMAL, L"%2"},
|
| - {L"%%%%%%", UnescapeRule::NORMAL, L"%%%%%%"},
|
| - {L"Don't escape anything", UnescapeRule::NORMAL, L"Don't escape anything"},
|
| - {L"Invalid %escape %2", UnescapeRule::NORMAL, L"Invalid %escape %2"},
|
| - {L"Some%20random text %25%2dOK", UnescapeRule::NONE,
|
| - L"Some%20random text %25%2dOK"},
|
| - {L"Some%20random text %25%2dOK", UnescapeRule::NORMAL,
|
| - L"Some%20random text %25-OK"},
|
| - {L"Some%20random text %25%E2%80", UnescapeRule::NORMAL,
|
| - L"Some%20random text %25\xE2\x80"},
|
| - {L"Some%20random text %25%E2%80OK", UnescapeRule::NORMAL,
|
| - L"Some%20random text %25\xE2\x80OK"},
|
| - {L"Some%20random text %25%E2%80%84OK", UnescapeRule::NORMAL,
|
| - L"Some%20random text %25\xE2\x80\x84OK"},
|
| -
|
| - // BiDi Control characters should not be unescaped unless explicity told to
|
| - // do so with UnescapeRule::SPOOFING_AND_CONTROL_CHARS
|
| - {L"Some%20random text %25%D8%9COK", UnescapeRule::NORMAL,
|
| - L"Some%20random text %25%D8%9COK"},
|
| - {L"Some%20random text %25%E2%80%8EOK", UnescapeRule::NORMAL,
|
| - L"Some%20random text %25%E2%80%8EOK"},
|
| - {L"Some%20random text %25%E2%80%8FOK", UnescapeRule::NORMAL,
|
| - L"Some%20random text %25%E2%80%8FOK"},
|
| - {L"Some%20random text %25%E2%80%AAOK", UnescapeRule::NORMAL,
|
| - L"Some%20random text %25%E2%80%AAOK"},
|
| - {L"Some%20random text %25%E2%80%ABOK", UnescapeRule::NORMAL,
|
| - L"Some%20random text %25%E2%80%ABOK"},
|
| - {L"Some%20random text %25%E2%80%AEOK", UnescapeRule::NORMAL,
|
| - L"Some%20random text %25%E2%80%AEOK"},
|
| - {L"Some%20random text %25%E2%81%A6OK", UnescapeRule::NORMAL,
|
| - L"Some%20random text %25%E2%81%A6OK"},
|
| - {L"Some%20random text %25%E2%81%A9OK", UnescapeRule::NORMAL,
|
| - L"Some%20random text %25%E2%81%A9OK"},
|
| - // UnescapeRule::SPOOFING_AND_CONTROL_CHARS should unescape BiDi Control
|
| - // characters.
|
| - {L"Some%20random text %25%D8%9COK",
|
| - UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| - L"Some%20random text %25\xD8\x9COK"},
|
| - {L"Some%20random text %25%E2%80%8EOK",
|
| - UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| - L"Some%20random text %25\xE2\x80\x8EOK"},
|
| - {L"Some%20random text %25%E2%80%8FOK",
|
| - UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| - L"Some%20random text %25\xE2\x80\x8FOK"},
|
| - {L"Some%20random text %25%E2%80%AAOK",
|
| - UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| - L"Some%20random text %25\xE2\x80\xAAOK"},
|
| - {L"Some%20random text %25%E2%80%ABOK",
|
| - UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| - L"Some%20random text %25\xE2\x80\xABOK"},
|
| - {L"Some%20random text %25%E2%80%AEOK",
|
| - UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| - L"Some%20random text %25\xE2\x80\xAEOK"},
|
| - {L"Some%20random text %25%E2%81%A6OK",
|
| - UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| - L"Some%20random text %25\xE2\x81\xA6OK"},
|
| - {L"Some%20random text %25%E2%81%A9OK",
|
| - UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| - L"Some%20random text %25\xE2\x81\xA9OK"},
|
| -
|
| - // Certain banned characters should not be unescaped unless explicitly told
|
| - // to do so with UnescapeRule::SPOOFING_AND_CONTROL_CHARS.
|
| - // U+1F50F LOCK WITH INK PEN
|
| - {L"Some%20random text %25%F0%9F%94%8FOK", UnescapeRule::NORMAL,
|
| - L"Some%20random text %25%F0%9F%94%8FOK"},
|
| - // U+1F510 CLOSED LOCK WITH KEY
|
| - {L"Some%20random text %25%F0%9F%94%90OK", UnescapeRule::NORMAL,
|
| - L"Some%20random text %25%F0%9F%94%90OK"},
|
| - // U+1F512 LOCK
|
| - {L"Some%20random text %25%F0%9F%94%92OK", UnescapeRule::NORMAL,
|
| - L"Some%20random text %25%F0%9F%94%92OK"},
|
| - // U+1F513 OPEN LOCK
|
| - {L"Some%20random text %25%F0%9F%94%93OK", UnescapeRule::NORMAL,
|
| - L"Some%20random text %25%F0%9F%94%93OK"},
|
| - // UnescapeRule::SPOOFING_AND_CONTROL_CHARS should unescape banned
|
| - // characters.
|
| - {L"Some%20random text %25%F0%9F%94%8FOK",
|
| - UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| - L"Some%20random text %25\xF0\x9F\x94\x8FOK"},
|
| - {L"Some%20random text %25%F0%9F%94%90OK",
|
| - UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| - L"Some%20random text %25\xF0\x9F\x94\x90OK"},
|
| - {L"Some%20random text %25%F0%9F%94%92OK",
|
| - UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| - L"Some%20random text %25\xF0\x9F\x94\x92OK"},
|
| - {L"Some%20random text %25%F0%9F%94%93OK",
|
| - UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| - L"Some%20random text %25\xF0\x9F\x94\x93OK"},
|
| -
|
| - {L"Some%20random text %25%2dOK", UnescapeRule::SPACES,
|
| - L"Some random text %25-OK"},
|
| - {L"Some%20random text %25%2dOK", UnescapeRule::URL_SPECIAL_CHARS,
|
| - L"Some%20random text %-OK"},
|
| - {L"Some%20random text %25%2dOK",
|
| - UnescapeRule::SPACES | UnescapeRule::URL_SPECIAL_CHARS,
|
| - L"Some random text %-OK"},
|
| - {L"%A0%B1%C2%D3%E4%F5", UnescapeRule::NORMAL, L"\xA0\xB1\xC2\xD3\xE4\xF5"},
|
| - {L"%Aa%Bb%Cc%Dd%Ee%Ff", UnescapeRule::NORMAL, L"\xAa\xBb\xCc\xDd\xEe\xFf"},
|
| - // Certain URL-sensitive characters should not be unescaped unless asked.
|
| - {L"Hello%20%13%10world %23# %3F? %3D= %26& %25% %2B+", UnescapeRule::SPACES,
|
| - L"Hello %13%10world %23# %3F? %3D= %26& %25% %2B+"},
|
| - {L"Hello%20%13%10world %23# %3F? %3D= %26& %25% %2B+",
|
| - UnescapeRule::URL_SPECIAL_CHARS,
|
| - L"Hello%20%13%10world ## ?? == && %% ++"},
|
| - // We can neither escape nor unescape '@' since some websites expect it to
|
| - // be preserved as either '@' or "%40".
|
| - // See http://b/996720 and http://crbug.com/23933 .
|
| - {L"me@my%40example", UnescapeRule::NORMAL, L"me@my%40example"},
|
| - // Control characters.
|
| - {L"%01%02%03%04%05%06%07%08%09 %25", UnescapeRule::URL_SPECIAL_CHARS,
|
| - L"%01%02%03%04%05%06%07%08%09 %"},
|
| - {L"%01%02%03%04%05%06%07%08%09 %25",
|
| - UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| - L"\x01\x02\x03\x04\x05\x06\x07\x08\x09 %25"},
|
| - {L"Hello%20%13%10%02", UnescapeRule::SPACES, L"Hello %13%10%02"},
|
| - {L"Hello%20%13%10%02", UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| - L"Hello%20\x13\x10\x02"},
|
| - {L"Hello\x9824\x9827", UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| - L"Hello\x9824\x9827"},
|
| + {L"", UnescapeRule::NORMAL, L""},
|
| + {L"%2", UnescapeRule::NORMAL, L"%2"},
|
| + {L"%%%%%%", UnescapeRule::NORMAL, L"%%%%%%"},
|
| + {L"Don't escape anything", UnescapeRule::NORMAL,
|
| + L"Don't escape anything"},
|
| + {L"Invalid %escape %2", UnescapeRule::NORMAL, L"Invalid %escape %2"},
|
| + {L"Some%20random text %25%2dOK", UnescapeRule::NONE,
|
| + L"Some%20random text %25%2dOK"},
|
| + {L"Some%20random text %25%2dOK", UnescapeRule::NORMAL,
|
| + L"Some%20random text %25-OK"},
|
| + {L"Some%20random text %25%E2%80", UnescapeRule::NORMAL,
|
| + L"Some%20random text %25\xE2\x80"},
|
| + {L"Some%20random text %25%E2%80OK", UnescapeRule::NORMAL,
|
| + L"Some%20random text %25\xE2\x80OK"},
|
| + {L"Some%20random text %25%E2%80%84OK", UnescapeRule::NORMAL,
|
| + L"Some%20random text %25\xE2\x80\x84OK"},
|
| +
|
| + // BiDi Control characters should not be unescaped unless explicity told
|
| + // to
|
| + // do so with UnescapeRule::SPOOFING_AND_CONTROL_CHARS
|
| + {L"Some%20random text %25%D8%9COK", UnescapeRule::NORMAL,
|
| + L"Some%20random text %25%D8%9COK"},
|
| + {L"Some%20random text %25%E2%80%8EOK", UnescapeRule::NORMAL,
|
| + L"Some%20random text %25%E2%80%8EOK"},
|
| + {L"Some%20random text %25%E2%80%8FOK", UnescapeRule::NORMAL,
|
| + L"Some%20random text %25%E2%80%8FOK"},
|
| + {L"Some%20random text %25%E2%80%AAOK", UnescapeRule::NORMAL,
|
| + L"Some%20random text %25%E2%80%AAOK"},
|
| + {L"Some%20random text %25%E2%80%ABOK", UnescapeRule::NORMAL,
|
| + L"Some%20random text %25%E2%80%ABOK"},
|
| + {L"Some%20random text %25%E2%80%AEOK", UnescapeRule::NORMAL,
|
| + L"Some%20random text %25%E2%80%AEOK"},
|
| + {L"Some%20random text %25%E2%81%A6OK", UnescapeRule::NORMAL,
|
| + L"Some%20random text %25%E2%81%A6OK"},
|
| + {L"Some%20random text %25%E2%81%A9OK", UnescapeRule::NORMAL,
|
| + L"Some%20random text %25%E2%81%A9OK"},
|
| + // UnescapeRule::SPOOFING_AND_CONTROL_CHARS should unescape BiDi Control
|
| + // characters.
|
| + {L"Some%20random text %25%D8%9COK",
|
| + UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| + L"Some%20random text %25\xD8\x9COK"},
|
| + {L"Some%20random text %25%E2%80%8EOK",
|
| + UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| + L"Some%20random text %25\xE2\x80\x8EOK"},
|
| + {L"Some%20random text %25%E2%80%8FOK",
|
| + UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| + L"Some%20random text %25\xE2\x80\x8FOK"},
|
| + {L"Some%20random text %25%E2%80%AAOK",
|
| + UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| + L"Some%20random text %25\xE2\x80\xAAOK"},
|
| + {L"Some%20random text %25%E2%80%ABOK",
|
| + UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| + L"Some%20random text %25\xE2\x80\xABOK"},
|
| + {L"Some%20random text %25%E2%80%AEOK",
|
| + UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| + L"Some%20random text %25\xE2\x80\xAEOK"},
|
| + {L"Some%20random text %25%E2%81%A6OK",
|
| + UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| + L"Some%20random text %25\xE2\x81\xA6OK"},
|
| + {L"Some%20random text %25%E2%81%A9OK",
|
| + UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| + L"Some%20random text %25\xE2\x81\xA9OK"},
|
| +
|
| + // Certain banned characters should not be unescaped unless explicitly
|
| + // told
|
| + // to do so with UnescapeRule::SPOOFING_AND_CONTROL_CHARS.
|
| + // U+1F50F LOCK WITH INK PEN
|
| + {L"Some%20random text %25%F0%9F%94%8FOK", UnescapeRule::NORMAL,
|
| + L"Some%20random text %25%F0%9F%94%8FOK"},
|
| + // U+1F510 CLOSED LOCK WITH KEY
|
| + {L"Some%20random text %25%F0%9F%94%90OK", UnescapeRule::NORMAL,
|
| + L"Some%20random text %25%F0%9F%94%90OK"},
|
| + // U+1F512 LOCK
|
| + {L"Some%20random text %25%F0%9F%94%92OK", UnescapeRule::NORMAL,
|
| + L"Some%20random text %25%F0%9F%94%92OK"},
|
| + // U+1F513 OPEN LOCK
|
| + {L"Some%20random text %25%F0%9F%94%93OK", UnescapeRule::NORMAL,
|
| + L"Some%20random text %25%F0%9F%94%93OK"},
|
| + // UnescapeRule::SPOOFING_AND_CONTROL_CHARS should unescape banned
|
| + // characters.
|
| + {L"Some%20random text %25%F0%9F%94%8FOK",
|
| + UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| + L"Some%20random text %25\xF0\x9F\x94\x8FOK"},
|
| + {L"Some%20random text %25%F0%9F%94%90OK",
|
| + UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| + L"Some%20random text %25\xF0\x9F\x94\x90OK"},
|
| + {L"Some%20random text %25%F0%9F%94%92OK",
|
| + UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| + L"Some%20random text %25\xF0\x9F\x94\x92OK"},
|
| + {L"Some%20random text %25%F0%9F%94%93OK",
|
| + UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| + L"Some%20random text %25\xF0\x9F\x94\x93OK"},
|
| +
|
| + {L"Some%20random text %25%2dOK", UnescapeRule::SPACES,
|
| + L"Some random text %25-OK"},
|
| + {L"Some%20random text %25%2dOK",
|
| + UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS,
|
| + L"Some%20random text %-OK"},
|
| + {L"Some%20random text %25%2dOK",
|
| + UnescapeRule::SPACES |
|
| + UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS,
|
| + L"Some random text %-OK"},
|
| + {L"%A0%B1%C2%D3%E4%F5", UnescapeRule::NORMAL,
|
| + L"\xA0\xB1\xC2\xD3\xE4\xF5"},
|
| + {L"%Aa%Bb%Cc%Dd%Ee%Ff", UnescapeRule::NORMAL,
|
| + L"\xAa\xBb\xCc\xDd\xEe\xFf"},
|
| + // Certain URL-sensitive characters should not be unescaped unless asked.
|
| + {L"Hello%20%13%10world %23# %3F? %3D= %26& %25% %2B+",
|
| + UnescapeRule::SPACES,
|
| + L"Hello %13%10world %23# %3F? %3D= %26& %25% %2B+"},
|
| + {L"Hello%20%13%10world %23# %3F? %3D= %26& %25% %2B+",
|
| + UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS,
|
| + L"Hello%20%13%10world ## ?? == && %% ++"},
|
| + // We can neither escape nor unescape '@' since some websites expect it to
|
| + // be preserved as either '@' or "%40".
|
| + // See http://b/996720 and http://crbug.com/23933 .
|
| + {L"me@my%40example", UnescapeRule::NORMAL, L"me@my%40example"},
|
| + // Control characters.
|
| + {L"%01%02%03%04%05%06%07%08%09 %25",
|
| + UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS,
|
| + L"%01%02%03%04%05%06%07%08%09 %"},
|
| + {L"%01%02%03%04%05%06%07%08%09 %25",
|
| + UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| + L"\x01\x02\x03\x04\x05\x06\x07\x08\x09 %25"},
|
| + {L"Hello%20%13%10%02", UnescapeRule::SPACES, L"Hello %13%10%02"},
|
| + {L"Hello%20%13%10%02", UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| + L"Hello%20\x13\x10\x02"},
|
| + {L"Hello\x9824\x9827", UnescapeRule::SPOOFING_AND_CONTROL_CHARS,
|
| + L"Hello\x9824\x9827"},
|
| };
|
|
|
| for (size_t i = 0; i < arraysize(unescape_cases); i++) {
|
|
|