Bug 359809: properly escape keyword searches when alternative character sets are specified, r=gavin

This commit is contained in:
Gustav Munkby 2011-04-28 16:56:04 -04:00
Родитель 26fe71a427
Коммит e1da3047cb
2 изменённых файлов: 16 добавлений и 2 удалений

Просмотреть файл

@ -2285,9 +2285,15 @@ function getShortcutOrURI(aURL, aPostDataRef) {
} catch (e) {} } catch (e) {}
} }
// encodeURIComponent produces UTF-8, and cannot be used for other charsets.
// escape() works in those cases, but it doesn't uri-encode +, @, and /.
// Therefore we need to manually replace these ASCII characters by their
// encodeURIComponent result, to match the behavior of nsEscape() with
// url_XPAlphas
var encodedParam = ""; var encodedParam = "";
if (charset) if (charset && charset != "UTF-8")
encodedParam = escape(convertFromUnicode(charset, param)); encodedParam = escape(convertFromUnicode(charset, param)).
replace(/[+@\/]+/g, encodeURIComponent);
else // Default charset is UTF-8 else // Default charset is UTF-8
encodedParam = encodeURIComponent(param); encodedParam = encodeURIComponent(param);

Просмотреть файл

@ -74,6 +74,14 @@ var testData = [
// Explicitly-defined ISO-8859-1 // Explicitly-defined ISO-8859-1
[new bmKeywordData("bmget-escaping2", "http://bmget/?esc=%s&raw=%S&mozcharset=ISO-8859-1", null, "foé"), [new bmKeywordData("bmget-escaping2", "http://bmget/?esc=%s&raw=%S&mozcharset=ISO-8859-1", null, "foé"),
new keywordResult("http://bmget/?esc=fo%E9&raw=foé", null)], new keywordResult("http://bmget/?esc=fo%E9&raw=foé", null)],
// Bug 359809: Test escaping +, /, and @
// UTF-8 default
[new bmKeywordData("bmget-escaping", "http://bmget/?esc=%s&raw=%S", null, "+/@"),
new keywordResult("http://bmget/?esc=%2B%2F%40&raw=+/@", null)],
// Explicitly-defined ISO-8859-1
[new bmKeywordData("bmget-escaping2", "http://bmget/?esc=%s&raw=%S&mozcharset=ISO-8859-1", null, "+/@"),
new keywordResult("http://bmget/?esc=%2B%2F%40&raw=+/@", null)],
]; ];
function test() { function test() {