| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <algorithm> | 5 #include <algorithm> |
| 6 #include <string> | 6 #include <string> |
| 7 | 7 |
| 8 #include "net/base/escape.h" | 8 #include "net/base/escape.h" |
| 9 | 9 |
| 10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 "%7B%7C%7D~%7F%80%FF"); | 143 "%7B%7C%7D~%7F%80%FF"); |
| 144 } | 144 } |
| 145 | 145 |
| 146 TEST(EscapeTest, EscapeUrlEncodedDataSpace) { | 146 TEST(EscapeTest, EscapeUrlEncodedDataSpace) { |
| 147 ASSERT_EQ(EscapeUrlEncodedData("a b", true), "a+b"); | 147 ASSERT_EQ(EscapeUrlEncodedData("a b", true), "a+b"); |
| 148 ASSERT_EQ(EscapeUrlEncodedData("a b", false), "a%20b"); | 148 ASSERT_EQ(EscapeUrlEncodedData("a b", false), "a%20b"); |
| 149 } | 149 } |
| 150 | 150 |
| 151 TEST(EscapeTest, UnescapeURLComponentASCII) { | 151 TEST(EscapeTest, UnescapeURLComponentASCII) { |
| 152 const UnescapeURLCaseASCII unescape_cases[] = { | 152 const UnescapeURLCaseASCII unescape_cases[] = { |
| 153 {"", UnescapeRule::NORMAL, ""}, | 153 {"", UnescapeRule::NORMAL, ""}, |
| 154 {"%2", UnescapeRule::NORMAL, "%2"}, | 154 {"%2", UnescapeRule::NORMAL, "%2"}, |
| 155 {"%%%%%%", UnescapeRule::NORMAL, "%%%%%%"}, | 155 {"%%%%%%", UnescapeRule::NORMAL, "%%%%%%"}, |
| 156 {"Don't escape anything", UnescapeRule::NORMAL, "Don't escape anything"}, | 156 {"Don't escape anything", UnescapeRule::NORMAL, "Don't escape anything"}, |
| 157 {"Invalid %escape %2", UnescapeRule::NORMAL, "Invalid %escape %2"}, | 157 {"Invalid %escape %2", UnescapeRule::NORMAL, "Invalid %escape %2"}, |
| 158 {"Some%20random text %25%2dOK", UnescapeRule::NONE, | 158 {"Some%20random text %25%2dOK", UnescapeRule::NONE, |
| 159 "Some%20random text %25%2dOK"}, | 159 "Some%20random text %25%2dOK"}, |
| 160 {"Some%20random text %25%2dOK", UnescapeRule::NORMAL, | 160 {"Some%20random text %25%2dOK", UnescapeRule::NORMAL, |
| 161 "Some%20random text %25-OK"}, | 161 "Some%20random text %25-OK"}, |
| 162 {"Some%20random text %25%2dOK", UnescapeRule::SPACES, | 162 {"Some%20random text %25%2dOK", UnescapeRule::SPACES, |
| 163 "Some random text %25-OK"}, | 163 "Some random text %25-OK"}, |
| 164 {"Some%20random text %25%2dOK", UnescapeRule::URL_SPECIAL_CHARS, | 164 {"Some%20random text %25%2dOK", UnescapeRule::PATH_SEPARATORS, |
| 165 "Some%20random text %-OK"}, | 165 "Some%20random text %25-OK"}, |
| 166 {"Some%20random text %25%2dOK", | 166 {"Some%20random text %25%2dOK", |
| 167 UnescapeRule::SPACES | UnescapeRule::URL_SPECIAL_CHARS, | 167 UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS, |
| 168 "Some random text %-OK"}, | 168 "Some%20random text %-OK"}, |
| 169 {"%A0%B1%C2%D3%E4%F5", UnescapeRule::NORMAL, "\xA0\xB1\xC2\xD3\xE4\xF5"}, | 169 {"Some%20random text %25%2dOK", |
| 170 {"%Aa%Bb%Cc%Dd%Ee%Ff", UnescapeRule::NORMAL, "\xAa\xBb\xCc\xDd\xEe\xFf"}, | 170 UnescapeRule::SPACES | |
| 171 // Certain URL-sensitive characters should not be unescaped unless asked. | 171 UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS, |
| 172 {"Hello%20%13%10world %23# %3F? %3D= %26& %25% %2B+", UnescapeRule::SPACES, | 172 "Some random text %-OK"}, |
| 173 "Hello %13%10world %23# %3F? %3D= %26& %25% %2B+"}, | 173 {"%A0%B1%C2%D3%E4%F5", UnescapeRule::NORMAL, "\xA0\xB1\xC2\xD3\xE4\xF5"}, |
| 174 {"Hello%20%13%10world %23# %3F? %3D= %26& %25% %2B+", | 174 {"%Aa%Bb%Cc%Dd%Ee%Ff", UnescapeRule::NORMAL, "\xAa\xBb\xCc\xDd\xEe\xFf"}, |
| 175 UnescapeRule::URL_SPECIAL_CHARS, | 175 // Certain URL-sensitive characters should not be unescaped unless asked. |
| 176 "Hello%20%13%10world ## ?? == && %% ++"}, | 176 {"Hello%20%13%10world %23# %3F? %3D= %26& %25% %2B+", |
| 177 // We can neither escape nor unescape '@' since some websites expect it to | 177 UnescapeRule::SPACES, "Hello %13%10world %23# %3F? %3D= %26& %25% %2B+"}, |
| 178 // be preserved as either '@' or "%40". | 178 {"Hello%20%13%10world %23# %3F? %3D= %26& %25% %2B+", |
| 179 // See http://b/996720 and http://crbug.com/23933 . | 179 UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS, |
| 180 {"me@my%40example", UnescapeRule::NORMAL, "me@my%40example"}, | 180 "Hello%20%13%10world ## ?? == && %% ++"}, |
| 181 // Control characters. | 181 // We can neither escape nor unescape '@' since some websites expect it to |
| 182 {"%01%02%03%04%05%06%07%08%09 %25", UnescapeRule::URL_SPECIAL_CHARS, | 182 // be preserved as either '@' or "%40". |
| 183 "%01%02%03%04%05%06%07%08%09 %"}, | 183 // See http://b/996720 and http://crbug.com/23933 . |
| 184 {"%01%02%03%04%05%06%07%08%09 %25", | 184 {"me@my%40example", UnescapeRule::NORMAL, "me@my%40example"}, |
| 185 UnescapeRule::SPOOFING_AND_CONTROL_CHARS, | 185 // Control characters. |
| 186 "\x01\x02\x03\x04\x05\x06\x07\x08\x09 %25"}, | 186 {"%01%02%03%04%05%06%07%08%09 %25", |
| 187 {"Hello%20%13%10%02", UnescapeRule::SPACES, "Hello %13%10%02"}, | 187 UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS, |
| 188 {"Hello%20%13%10%02", UnescapeRule::SPOOFING_AND_CONTROL_CHARS, | 188 "%01%02%03%04%05%06%07%08%09 %"}, |
| 189 "Hello%20\x13\x10\x02"}, | 189 {"%01%02%03%04%05%06%07%08%09 %25", |
| 190 UnescapeRule::SPOOFING_AND_CONTROL_CHARS, |
| 191 "\x01\x02\x03\x04\x05\x06\x07\x08\x09 %25"}, |
| 192 {"Hello%20%13%10%02", UnescapeRule::SPACES, "Hello %13%10%02"}, |
| 193 {"Hello%20%13%10%02", UnescapeRule::SPOOFING_AND_CONTROL_CHARS, |
| 194 "Hello%20\x13\x10\x02"}, |
| 195 |
| 196 // '/' and '\\' should only be unescaped by PATH_SEPARATORS. |
| 197 {"%2F%5C", UnescapeRule::PATH_SEPARATORS, "/\\"}, |
| 198 {"%2F%5C", UnescapeRule::SPACES | |
| 199 UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS | |
| 200 UnescapeRule::SPOOFING_AND_CONTROL_CHARS, |
| 201 "%2F%5C"}, |
| 190 }; | 202 }; |
| 191 | 203 |
| 192 for (size_t i = 0; i < arraysize(unescape_cases); i++) { | 204 for (size_t i = 0; i < arraysize(unescape_cases); i++) { |
| 193 std::string str(unescape_cases[i].input); | 205 std::string str(unescape_cases[i].input); |
| 194 EXPECT_EQ(std::string(unescape_cases[i].output), | 206 EXPECT_EQ(std::string(unescape_cases[i].output), |
| 195 UnescapeURLComponent(str, unescape_cases[i].rules)); | 207 UnescapeURLComponent(str, unescape_cases[i].rules)); |
| 196 } | 208 } |
| 197 | 209 |
| 198 // Test the NULL character unescaping (which wouldn't work above since those | 210 // Test the NULL character unescaping (which wouldn't work above since those |
| 199 // are just char pointers). | 211 // are just char pointers). |
| (...skipping 11 matching lines...) Expand all Loading... |
| 211 | 223 |
| 212 // When we're not unescaping NULLs. | 224 // When we're not unescaping NULLs. |
| 213 expected = "Null"; | 225 expected = "Null"; |
| 214 expected.push_back(0); | 226 expected.push_back(0); |
| 215 expected.append("%009Test"); | 227 expected.append("%009Test"); |
| 216 EXPECT_EQ(expected, UnescapeURLComponent(input, UnescapeRule::NORMAL)); | 228 EXPECT_EQ(expected, UnescapeURLComponent(input, UnescapeRule::NORMAL)); |
| 217 } | 229 } |
| 218 | 230 |
| 219 TEST(EscapeTest, UnescapeURLComponent) { | 231 TEST(EscapeTest, UnescapeURLComponent) { |
| 220 const UnescapeURLCase unescape_cases[] = { | 232 const UnescapeURLCase unescape_cases[] = { |
| 221 {L"", UnescapeRule::NORMAL, L""}, | 233 {L"", UnescapeRule::NORMAL, L""}, |
| 222 {L"%2", UnescapeRule::NORMAL, L"%2"}, | 234 {L"%2", UnescapeRule::NORMAL, L"%2"}, |
| 223 {L"%%%%%%", UnescapeRule::NORMAL, L"%%%%%%"}, | 235 {L"%%%%%%", UnescapeRule::NORMAL, L"%%%%%%"}, |
| 224 {L"Don't escape anything", UnescapeRule::NORMAL, L"Don't escape anything"}, | 236 {L"Don't escape anything", UnescapeRule::NORMAL, |
| 225 {L"Invalid %escape %2", UnescapeRule::NORMAL, L"Invalid %escape %2"}, | 237 L"Don't escape anything"}, |
| 226 {L"Some%20random text %25%2dOK", UnescapeRule::NONE, | 238 {L"Invalid %escape %2", UnescapeRule::NORMAL, L"Invalid %escape %2"}, |
| 227 L"Some%20random text %25%2dOK"}, | 239 {L"Some%20random text %25%2dOK", UnescapeRule::NONE, |
| 228 {L"Some%20random text %25%2dOK", UnescapeRule::NORMAL, | 240 L"Some%20random text %25%2dOK"}, |
| 229 L"Some%20random text %25-OK"}, | 241 {L"Some%20random text %25%2dOK", UnescapeRule::NORMAL, |
| 230 {L"Some%20random text %25%E2%80", UnescapeRule::NORMAL, | 242 L"Some%20random text %25-OK"}, |
| 231 L"Some%20random text %25\xE2\x80"}, | 243 {L"Some%20random text %25%E2%80", UnescapeRule::NORMAL, |
| 232 {L"Some%20random text %25%E2%80OK", UnescapeRule::NORMAL, | 244 L"Some%20random text %25\xE2\x80"}, |
| 233 L"Some%20random text %25\xE2\x80OK"}, | 245 {L"Some%20random text %25%E2%80OK", UnescapeRule::NORMAL, |
| 234 {L"Some%20random text %25%E2%80%84OK", UnescapeRule::NORMAL, | 246 L"Some%20random text %25\xE2\x80OK"}, |
| 235 L"Some%20random text %25\xE2\x80\x84OK"}, | 247 {L"Some%20random text %25%E2%80%84OK", UnescapeRule::NORMAL, |
| 248 L"Some%20random text %25\xE2\x80\x84OK"}, |
| 236 | 249 |
| 237 // BiDi Control characters should not be unescaped unless explicity told to | 250 // BiDi Control characters should not be unescaped unless explicity told |
| 238 // do so with UnescapeRule::SPOOFING_AND_CONTROL_CHARS | 251 // to |
| 239 {L"Some%20random text %25%D8%9COK", UnescapeRule::NORMAL, | 252 // do so with UnescapeRule::SPOOFING_AND_CONTROL_CHARS |
| 240 L"Some%20random text %25%D8%9COK"}, | 253 {L"Some%20random text %25%D8%9COK", UnescapeRule::NORMAL, |
| 241 {L"Some%20random text %25%E2%80%8EOK", UnescapeRule::NORMAL, | 254 L"Some%20random text %25%D8%9COK"}, |
| 242 L"Some%20random text %25%E2%80%8EOK"}, | 255 {L"Some%20random text %25%E2%80%8EOK", UnescapeRule::NORMAL, |
| 243 {L"Some%20random text %25%E2%80%8FOK", UnescapeRule::NORMAL, | 256 L"Some%20random text %25%E2%80%8EOK"}, |
| 244 L"Some%20random text %25%E2%80%8FOK"}, | 257 {L"Some%20random text %25%E2%80%8FOK", UnescapeRule::NORMAL, |
| 245 {L"Some%20random text %25%E2%80%AAOK", UnescapeRule::NORMAL, | 258 L"Some%20random text %25%E2%80%8FOK"}, |
| 246 L"Some%20random text %25%E2%80%AAOK"}, | 259 {L"Some%20random text %25%E2%80%AAOK", UnescapeRule::NORMAL, |
| 247 {L"Some%20random text %25%E2%80%ABOK", UnescapeRule::NORMAL, | 260 L"Some%20random text %25%E2%80%AAOK"}, |
| 248 L"Some%20random text %25%E2%80%ABOK"}, | 261 {L"Some%20random text %25%E2%80%ABOK", UnescapeRule::NORMAL, |
| 249 {L"Some%20random text %25%E2%80%AEOK", UnescapeRule::NORMAL, | 262 L"Some%20random text %25%E2%80%ABOK"}, |
| 250 L"Some%20random text %25%E2%80%AEOK"}, | 263 {L"Some%20random text %25%E2%80%AEOK", UnescapeRule::NORMAL, |
| 251 {L"Some%20random text %25%E2%81%A6OK", UnescapeRule::NORMAL, | 264 L"Some%20random text %25%E2%80%AEOK"}, |
| 252 L"Some%20random text %25%E2%81%A6OK"}, | 265 {L"Some%20random text %25%E2%81%A6OK", UnescapeRule::NORMAL, |
| 253 {L"Some%20random text %25%E2%81%A9OK", UnescapeRule::NORMAL, | 266 L"Some%20random text %25%E2%81%A6OK"}, |
| 254 L"Some%20random text %25%E2%81%A9OK"}, | 267 {L"Some%20random text %25%E2%81%A9OK", UnescapeRule::NORMAL, |
| 255 // UnescapeRule::SPOOFING_AND_CONTROL_CHARS should unescape BiDi Control | 268 L"Some%20random text %25%E2%81%A9OK"}, |
| 256 // characters. | 269 // UnescapeRule::SPOOFING_AND_CONTROL_CHARS should unescape BiDi Control |
| 257 {L"Some%20random text %25%D8%9COK", | 270 // characters. |
| 258 UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS, | 271 {L"Some%20random text %25%D8%9COK", |
| 259 L"Some%20random text %25\xD8\x9COK"}, | 272 UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS, |
| 260 {L"Some%20random text %25%E2%80%8EOK", | 273 L"Some%20random text %25\xD8\x9COK"}, |
| 261 UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS, | 274 {L"Some%20random text %25%E2%80%8EOK", |
| 262 L"Some%20random text %25\xE2\x80\x8EOK"}, | 275 UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS, |
| 263 {L"Some%20random text %25%E2%80%8FOK", | 276 L"Some%20random text %25\xE2\x80\x8EOK"}, |
| 264 UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS, | 277 {L"Some%20random text %25%E2%80%8FOK", |
| 265 L"Some%20random text %25\xE2\x80\x8FOK"}, | 278 UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS, |
| 266 {L"Some%20random text %25%E2%80%AAOK", | 279 L"Some%20random text %25\xE2\x80\x8FOK"}, |
| 267 UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS, | 280 {L"Some%20random text %25%E2%80%AAOK", |
| 268 L"Some%20random text %25\xE2\x80\xAAOK"}, | 281 UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS, |
| 269 {L"Some%20random text %25%E2%80%ABOK", | 282 L"Some%20random text %25\xE2\x80\xAAOK"}, |
| 270 UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS, | 283 {L"Some%20random text %25%E2%80%ABOK", |
| 271 L"Some%20random text %25\xE2\x80\xABOK"}, | 284 UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS, |
| 272 {L"Some%20random text %25%E2%80%AEOK", | 285 L"Some%20random text %25\xE2\x80\xABOK"}, |
| 273 UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS, | 286 {L"Some%20random text %25%E2%80%AEOK", |
| 274 L"Some%20random text %25\xE2\x80\xAEOK"}, | 287 UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS, |
| 275 {L"Some%20random text %25%E2%81%A6OK", | 288 L"Some%20random text %25\xE2\x80\xAEOK"}, |
| 276 UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS, | 289 {L"Some%20random text %25%E2%81%A6OK", |
| 277 L"Some%20random text %25\xE2\x81\xA6OK"}, | 290 UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS, |
| 278 {L"Some%20random text %25%E2%81%A9OK", | 291 L"Some%20random text %25\xE2\x81\xA6OK"}, |
| 279 UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS, | 292 {L"Some%20random text %25%E2%81%A9OK", |
| 280 L"Some%20random text %25\xE2\x81\xA9OK"}, | 293 UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS, |
| 294 L"Some%20random text %25\xE2\x81\xA9OK"}, |
| 281 | 295 |
| 282 // Certain banned characters should not be unescaped unless explicitly told | 296 // Certain banned characters should not be unescaped unless explicitly |
| 283 // to do so with UnescapeRule::SPOOFING_AND_CONTROL_CHARS. | 297 // told |
| 284 // U+1F50F LOCK WITH INK PEN | 298 // to do so with UnescapeRule::SPOOFING_AND_CONTROL_CHARS. |
| 285 {L"Some%20random text %25%F0%9F%94%8FOK", UnescapeRule::NORMAL, | 299 // U+1F50F LOCK WITH INK PEN |
| 286 L"Some%20random text %25%F0%9F%94%8FOK"}, | 300 {L"Some%20random text %25%F0%9F%94%8FOK", UnescapeRule::NORMAL, |
| 287 // U+1F510 CLOSED LOCK WITH KEY | 301 L"Some%20random text %25%F0%9F%94%8FOK"}, |
| 288 {L"Some%20random text %25%F0%9F%94%90OK", UnescapeRule::NORMAL, | 302 // U+1F510 CLOSED LOCK WITH KEY |
| 289 L"Some%20random text %25%F0%9F%94%90OK"}, | 303 {L"Some%20random text %25%F0%9F%94%90OK", UnescapeRule::NORMAL, |
| 290 // U+1F512 LOCK | 304 L"Some%20random text %25%F0%9F%94%90OK"}, |
| 291 {L"Some%20random text %25%F0%9F%94%92OK", UnescapeRule::NORMAL, | 305 // U+1F512 LOCK |
| 292 L"Some%20random text %25%F0%9F%94%92OK"}, | 306 {L"Some%20random text %25%F0%9F%94%92OK", UnescapeRule::NORMAL, |
| 293 // U+1F513 OPEN LOCK | 307 L"Some%20random text %25%F0%9F%94%92OK"}, |
| 294 {L"Some%20random text %25%F0%9F%94%93OK", UnescapeRule::NORMAL, | 308 // U+1F513 OPEN LOCK |
| 295 L"Some%20random text %25%F0%9F%94%93OK"}, | 309 {L"Some%20random text %25%F0%9F%94%93OK", UnescapeRule::NORMAL, |
| 296 // UnescapeRule::SPOOFING_AND_CONTROL_CHARS should unescape banned | 310 L"Some%20random text %25%F0%9F%94%93OK"}, |
| 297 // characters. | 311 // UnescapeRule::SPOOFING_AND_CONTROL_CHARS should unescape banned |
| 298 {L"Some%20random text %25%F0%9F%94%8FOK", | 312 // characters. |
| 299 UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS, | 313 {L"Some%20random text %25%F0%9F%94%8FOK", |
| 300 L"Some%20random text %25\xF0\x9F\x94\x8FOK"}, | 314 UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS, |
| 301 {L"Some%20random text %25%F0%9F%94%90OK", | 315 L"Some%20random text %25\xF0\x9F\x94\x8FOK"}, |
| 302 UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS, | 316 {L"Some%20random text %25%F0%9F%94%90OK", |
| 303 L"Some%20random text %25\xF0\x9F\x94\x90OK"}, | 317 UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS, |
| 304 {L"Some%20random text %25%F0%9F%94%92OK", | 318 L"Some%20random text %25\xF0\x9F\x94\x90OK"}, |
| 305 UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS, | 319 {L"Some%20random text %25%F0%9F%94%92OK", |
| 306 L"Some%20random text %25\xF0\x9F\x94\x92OK"}, | 320 UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS, |
| 307 {L"Some%20random text %25%F0%9F%94%93OK", | 321 L"Some%20random text %25\xF0\x9F\x94\x92OK"}, |
| 308 UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS, | 322 {L"Some%20random text %25%F0%9F%94%93OK", |
| 309 L"Some%20random text %25\xF0\x9F\x94\x93OK"}, | 323 UnescapeRule::NORMAL | UnescapeRule::SPOOFING_AND_CONTROL_CHARS, |
| 324 L"Some%20random text %25\xF0\x9F\x94\x93OK"}, |
| 310 | 325 |
| 311 {L"Some%20random text %25%2dOK", UnescapeRule::SPACES, | 326 {L"Some%20random text %25%2dOK", UnescapeRule::SPACES, |
| 312 L"Some random text %25-OK"}, | 327 L"Some random text %25-OK"}, |
| 313 {L"Some%20random text %25%2dOK", UnescapeRule::URL_SPECIAL_CHARS, | 328 {L"Some%20random text %25%2dOK", |
| 314 L"Some%20random text %-OK"}, | 329 UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS, |
| 315 {L"Some%20random text %25%2dOK", | 330 L"Some%20random text %-OK"}, |
| 316 UnescapeRule::SPACES | UnescapeRule::URL_SPECIAL_CHARS, | 331 {L"Some%20random text %25%2dOK", |
| 317 L"Some random text %-OK"}, | 332 UnescapeRule::SPACES | |
| 318 {L"%A0%B1%C2%D3%E4%F5", UnescapeRule::NORMAL, L"\xA0\xB1\xC2\xD3\xE4\xF5"}, | 333 UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS, |
| 319 {L"%Aa%Bb%Cc%Dd%Ee%Ff", UnescapeRule::NORMAL, L"\xAa\xBb\xCc\xDd\xEe\xFf"}, | 334 L"Some random text %-OK"}, |
| 320 // Certain URL-sensitive characters should not be unescaped unless asked. | 335 {L"%A0%B1%C2%D3%E4%F5", UnescapeRule::NORMAL, |
| 321 {L"Hello%20%13%10world %23# %3F? %3D= %26& %25% %2B+", UnescapeRule::SPACES, | 336 L"\xA0\xB1\xC2\xD3\xE4\xF5"}, |
| 322 L"Hello %13%10world %23# %3F? %3D= %26& %25% %2B+"}, | 337 {L"%Aa%Bb%Cc%Dd%Ee%Ff", UnescapeRule::NORMAL, |
| 323 {L"Hello%20%13%10world %23# %3F? %3D= %26& %25% %2B+", | 338 L"\xAa\xBb\xCc\xDd\xEe\xFf"}, |
| 324 UnescapeRule::URL_SPECIAL_CHARS, | 339 // Certain URL-sensitive characters should not be unescaped unless asked. |
| 325 L"Hello%20%13%10world ## ?? == && %% ++"}, | 340 {L"Hello%20%13%10world %23# %3F? %3D= %26& %25% %2B+", |
| 326 // We can neither escape nor unescape '@' since some websites expect it to | 341 UnescapeRule::SPACES, |
| 327 // be preserved as either '@' or "%40". | 342 L"Hello %13%10world %23# %3F? %3D= %26& %25% %2B+"}, |
| 328 // See http://b/996720 and http://crbug.com/23933 . | 343 {L"Hello%20%13%10world %23# %3F? %3D= %26& %25% %2B+", |
| 329 {L"me@my%40example", UnescapeRule::NORMAL, L"me@my%40example"}, | 344 UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS, |
| 330 // Control characters. | 345 L"Hello%20%13%10world ## ?? == && %% ++"}, |
| 331 {L"%01%02%03%04%05%06%07%08%09 %25", UnescapeRule::URL_SPECIAL_CHARS, | 346 // We can neither escape nor unescape '@' since some websites expect it to |
| 332 L"%01%02%03%04%05%06%07%08%09 %"}, | 347 // be preserved as either '@' or "%40". |
| 333 {L"%01%02%03%04%05%06%07%08%09 %25", | 348 // See http://b/996720 and http://crbug.com/23933 . |
| 334 UnescapeRule::SPOOFING_AND_CONTROL_CHARS, | 349 {L"me@my%40example", UnescapeRule::NORMAL, L"me@my%40example"}, |
| 335 L"\x01\x02\x03\x04\x05\x06\x07\x08\x09 %25"}, | 350 // Control characters. |
| 336 {L"Hello%20%13%10%02", UnescapeRule::SPACES, L"Hello %13%10%02"}, | 351 {L"%01%02%03%04%05%06%07%08%09 %25", |
| 337 {L"Hello%20%13%10%02", UnescapeRule::SPOOFING_AND_CONTROL_CHARS, | 352 UnescapeRule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS, |
| 338 L"Hello%20\x13\x10\x02"}, | 353 L"%01%02%03%04%05%06%07%08%09 %"}, |
| 339 {L"Hello\x9824\x9827", UnescapeRule::SPOOFING_AND_CONTROL_CHARS, | 354 {L"%01%02%03%04%05%06%07%08%09 %25", |
| 340 L"Hello\x9824\x9827"}, | 355 UnescapeRule::SPOOFING_AND_CONTROL_CHARS, |
| 356 L"\x01\x02\x03\x04\x05\x06\x07\x08\x09 %25"}, |
| 357 {L"Hello%20%13%10%02", UnescapeRule::SPACES, L"Hello %13%10%02"}, |
| 358 {L"Hello%20%13%10%02", UnescapeRule::SPOOFING_AND_CONTROL_CHARS, |
| 359 L"Hello%20\x13\x10\x02"}, |
| 360 {L"Hello\x9824\x9827", UnescapeRule::SPOOFING_AND_CONTROL_CHARS, |
| 361 L"Hello\x9824\x9827"}, |
| 341 }; | 362 }; |
| 342 | 363 |
| 343 for (size_t i = 0; i < arraysize(unescape_cases); i++) { | 364 for (size_t i = 0; i < arraysize(unescape_cases); i++) { |
| 344 base::string16 str(base::WideToUTF16(unescape_cases[i].input)); | 365 base::string16 str(base::WideToUTF16(unescape_cases[i].input)); |
| 345 EXPECT_EQ(base::WideToUTF16(unescape_cases[i].output), | 366 EXPECT_EQ(base::WideToUTF16(unescape_cases[i].output), |
| 346 UnescapeURLComponent(str, unescape_cases[i].rules)); | 367 UnescapeURLComponent(str, unescape_cases[i].rules)); |
| 347 } | 368 } |
| 348 | 369 |
| 349 // Test the NULL character unescaping (which wouldn't work above since those | 370 // Test the NULL character unescaping (which wouldn't work above since those |
| 350 // are just char pointers). | 371 // are just char pointers). |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 546 "http://example.com/path/sub?q=a|b|c&q=1|2|3#ref|")); | 567 "http://example.com/path/sub?q=a|b|c&q=1|2|3#ref|")); |
| 547 ASSERT_EQ("http://example.com/path/sub?q=a%7Cb%7Cc&q=1%7C2%7C3#ref%7C", | 568 ASSERT_EQ("http://example.com/path/sub?q=a%7Cb%7Cc&q=1%7C2%7C3#ref%7C", |
| 548 EscapeExternalHandlerValue( | 569 EscapeExternalHandlerValue( |
| 549 "http://example.com/path/sub?q=a%7Cb%7Cc&q=1%7C2%7C3#ref%7C")); | 570 "http://example.com/path/sub?q=a%7Cb%7Cc&q=1%7C2%7C3#ref%7C")); |
| 550 ASSERT_EQ("http://[2001:db8:0:1]:80", | 571 ASSERT_EQ("http://[2001:db8:0:1]:80", |
| 551 EscapeExternalHandlerValue("http://[2001:db8:0:1]:80")); | 572 EscapeExternalHandlerValue("http://[2001:db8:0:1]:80")); |
| 552 } | 573 } |
| 553 | 574 |
| 554 } // namespace | 575 } // namespace |
| 555 } // namespace net | 576 } // namespace net |
| OLD | NEW |