querystring: fix unescape override
Documentation states that `querystring.unescape` may be overridden to replace unescaper during parsing. However, the function was only being used as a fallback for when the native decoder throws (on a malformed URL). This patch moves the call to the native function and the try/catch around it into querystring.unescape then has the parser always invoke it, so that an override will always be used. Fixes #4055 Reviewed-By: Fedor Indutny <fedor@indutny.com>
This commit is contained in:
parent
f39e608c6e
commit
0f2956192c
@ -105,7 +105,11 @@ QueryString.unescapeBuffer = function(s, decodeSpaces) {
|
|||||||
|
|
||||||
|
|
||||||
QueryString.unescape = function(s, decodeSpaces) {
|
QueryString.unescape = function(s, decodeSpaces) {
|
||||||
|
try {
|
||||||
|
return decodeURIComponent(s);
|
||||||
|
} catch (e) {
|
||||||
return QueryString.unescapeBuffer(s, decodeSpaces).toString();
|
return QueryString.unescapeBuffer(s, decodeSpaces).toString();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -193,13 +197,8 @@ QueryString.parse = QueryString.decode = function(qs, sep, eq, options) {
|
|||||||
vstr = '';
|
vstr = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
|
||||||
k = decodeURIComponent(kstr);
|
|
||||||
v = decodeURIComponent(vstr);
|
|
||||||
} catch (e) {
|
|
||||||
k = QueryString.unescape(kstr, true);
|
k = QueryString.unescape(kstr, true);
|
||||||
v = QueryString.unescape(vstr, true);
|
v = QueryString.unescape(vstr, true);
|
||||||
}
|
|
||||||
|
|
||||||
if (!hasOwnProperty(obj, k)) {
|
if (!hasOwnProperty(obj, k)) {
|
||||||
obj[k] = v;
|
obj[k] = v;
|
||||||
|
@ -229,3 +229,11 @@ assert.equal(0xeb, b[16]);
|
|||||||
assert.equal(0xd8, b[17]);
|
assert.equal(0xd8, b[17]);
|
||||||
assert.equal(0xa2, b[18]);
|
assert.equal(0xa2, b[18]);
|
||||||
assert.equal(0xe6, b[19]);
|
assert.equal(0xe6, b[19]);
|
||||||
|
|
||||||
|
// test overriding .unescape
|
||||||
|
var prevUnescape = qs.unescape;
|
||||||
|
qs.unescape = function (str) {
|
||||||
|
return str.replace(/o/g, '_');
|
||||||
|
};
|
||||||
|
assert.deepEqual(qs.parse('foo=bor'), {f__: 'b_r'});
|
||||||
|
qs.unescape = prevUnescape;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user