summaryrefslogtreecommitdiff
path: root/data/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/lib/url_handler/node_querystring.js
diff options
context:
space:
mode:
Diffstat (limited to 'data/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/lib/url_handler/node_querystring.js')
-rw-r--r--data/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/lib/url_handler/node_querystring.js180
1 files changed, 103 insertions, 77 deletions
diff --git a/data/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/lib/url_handler/node_querystring.js b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/lib/url_handler/node_querystring.js
index 3314061..f8c7921 100644
--- a/data/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/lib/url_handler/node_querystring.js
+++ b/data/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/lib/url_handler/node_querystring.js
@@ -22,7 +22,6 @@
// Query String Utilities
var QueryString = exports;
-//var urlDecode = process.binding('http_parser').urlDecode;
// If obj.hasOwnProperty has been overridden, then calling
@@ -47,55 +46,55 @@ QueryString.unescapeBuffer = function(s, decodeSpaces) {
for (var inIndex = 0, outIndex = 0; inIndex <= s.length; inIndex++) {
var c = s.charCodeAt(inIndex);
switch (state) {
- case 'CHAR':
- switch (c) {
- case charCode('%'):
- n = 0;
- m = 0;
- state = 'HEX0';
+ case 'CHAR':
+ switch (c) {
+ case charCode('%'):
+ n = 0;
+ m = 0;
+ state = 'HEX0';
+ break;
+ case charCode('+'):
+ if (decodeSpaces) c = charCode(' ');
+ // pass thru
+ default:
+ out[outIndex++] = c;
+ break;
+ }
break;
- case charCode('+'):
- if (decodeSpaces) c = charCode(' ');
- // pass thru
- default:
- out[outIndex++] = c;
+
+ case 'HEX0':
+ state = 'HEX1';
+ hexchar = c;
+ if (charCode('0') <= c && c <= charCode('9')) {
+ n = c - charCode('0');
+ } else if (charCode('a') <= c && c <= charCode('f')) {
+ n = c - charCode('a') + 10;
+ } else if (charCode('A') <= c && c <= charCode('F')) {
+ n = c - charCode('A') + 10;
+ } else {
+ out[outIndex++] = charCode('%');
+ out[outIndex++] = c;
+ state = 'CHAR';
+ break;
+ }
break;
- }
- break;
-
- case 'HEX0':
- state = 'HEX1';
- hexchar = c;
- if (charCode('0') <= c && c <= charCode('9')) {
- n = c - charCode('0');
- } else if (charCode('a') <= c && c <= charCode('f')) {
- n = c - charCode('a') + 10;
- } else if (charCode('A') <= c && c <= charCode('F')) {
- n = c - charCode('A') + 10;
- } else {
- out[outIndex++] = charCode('%');
- out[outIndex++] = c;
+
+ case 'HEX1':
state = 'CHAR';
+ if (charCode('0') <= c && c <= charCode('9')) {
+ m = c - charCode('0');
+ } else if (charCode('a') <= c && c <= charCode('f')) {
+ m = c - charCode('a') + 10;
+ } else if (charCode('A') <= c && c <= charCode('F')) {
+ m = c - charCode('A') + 10;
+ } else {
+ out[outIndex++] = charCode('%');
+ out[outIndex++] = hexchar;
+ out[outIndex++] = c;
+ break;
+ }
+ out[outIndex++] = 16 * n + m;
break;
- }
- break;
-
- case 'HEX1':
- state = 'CHAR';
- if (charCode('0') <= c && c <= charCode('9')) {
- m = c - charCode('0');
- } else if (charCode('a') <= c && c <= charCode('f')) {
- m = c - charCode('a') + 10;
- } else if (charCode('A') <= c && c <= charCode('F')) {
- m = c - charCode('A') + 10;
- } else {
- out[outIndex++] = charCode('%');
- out[outIndex++] = hexchar;
- out[outIndex++] = c;
- break;
- }
- out[outIndex++] = 16 * n + m;
- break;
}
}
@@ -106,7 +105,11 @@ QueryString.unescapeBuffer = function(s, decodeSpaces) {
QueryString.unescape = function(s, decodeSpaces) {
- return QueryString.unescapeBuffer(s, decodeSpaces).toString();
+ try {
+ return decodeURIComponent(s);
+ } catch (e) {
+ return QueryString.unescapeBuffer(s, decodeSpaces).toString();
+ }
};
@@ -116,17 +119,17 @@ QueryString.escape = function(str) {
var stringifyPrimitive = function(v) {
switch (typeof v) {
- case 'string':
- return v;
+ case 'string':
+ return v;
- case 'boolean':
- return v ? 'true' : 'false';
+ case 'boolean':
+ return v ? 'true' : 'false';
- case 'number':
- return isFinite(v) ? v : '';
+ case 'number':
+ return isFinite(v) ? v : '';
- default:
- return '';
+ default:
+ return '';
}
};
@@ -134,33 +137,31 @@ var stringifyPrimitive = function(v) {
QueryString.stringify = QueryString.encode = function(obj, sep, eq, name) {
sep = sep || '&';
eq = eq || '=';
- obj = (obj === null) ? undefined : obj;
+ if (obj === null) {
+ obj = undefined;
+ }
- switch (typeof obj) {
- case 'object':
+ if (typeof obj === 'object') {
return Object.keys(obj).map(function(k) {
+ var ks = QueryString.escape(stringifyPrimitive(k)) + eq;
if (Array.isArray(obj[k])) {
return obj[k].map(function(v) {
- return QueryString.escape(stringifyPrimitive(k)) +
- eq +
- QueryString.escape(stringifyPrimitive(v));
+ return ks + QueryString.escape(stringifyPrimitive(v));
}).join(sep);
} else {
- return QueryString.escape(stringifyPrimitive(k)) +
- eq +
- QueryString.escape(stringifyPrimitive(obj[k]));
+ return ks + QueryString.escape(stringifyPrimitive(obj[k]));
}
}).join(sep);
- default:
- if (!name) return '';
- return QueryString.escape(stringifyPrimitive(name)) + eq +
- QueryString.escape(stringifyPrimitive(obj));
}
+
+ if (!name) return '';
+ return QueryString.escape(stringifyPrimitive(name)) + eq +
+ QueryString.escape(stringifyPrimitive(obj));
};
// Parse a key=val string.
-QueryString.parse = QueryString.decode = function(qs, sep, eq) {
+QueryString.parse = QueryString.decode = function(qs, sep, eq, options) {
sep = sep || '&';
eq = eq || '=';
var obj = {};
@@ -169,19 +170,44 @@ QueryString.parse = QueryString.decode = function(qs, sep, eq) {
return obj;
}
- qs.split(sep).forEach(function(kvp) {
- var x = kvp.split(eq);
- var k = QueryString.unescape(x[0], true);
- var v = QueryString.unescape(x.slice(1).join(eq), true);
+ var regexp = /\+/g;
+ qs = qs.split(sep);
+
+ var maxKeys = 1000;
+ if (options && typeof options.maxKeys === 'number') {
+ maxKeys = options.maxKeys;
+ }
+
+ var len = qs.length;
+ // maxKeys <= 0 means that we should not limit keys count
+ if (maxKeys > 0 && len > maxKeys) {
+ len = maxKeys;
+ }
+
+ for (var i = 0; i < len; ++i) {
+ var x = qs[i].replace(regexp, '%20'),
+ idx = x.indexOf(eq),
+ kstr, vstr, k, v;
+
+ if (idx >= 0) {
+ kstr = x.substr(0, idx);
+ vstr = x.substr(idx + 1);
+ } else {
+ kstr = x;
+ vstr = '';
+ }
+
+ k = QueryString.unescape(kstr, true);
+ v = QueryString.unescape(vstr, true);
if (!hasOwnProperty(obj, k)) {
obj[k] = v;
- } else if (!Array.isArray(obj[k])) {
- obj[k] = [obj[k], v];
- } else {
+ } else if (Array.isArray(obj[k])) {
obj[k].push(v);
+ } else {
+ obj[k] = [obj[k], v];
}
- });
+ }
return obj;
};