Skip to content

Commit fe9baa7

Browse files
yosuke-furukawarvagg
authored andcommitted
querystring: Parse multiple separator characters
Fix querystring.parse to handle multiple separator characters PR-URL: #3807 Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Brian White <[email protected]> Reviewed-By: James M Snell <[email protected]>
1 parent 2c52bbc commit fe9baa7

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

lib/querystring.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ QueryString.stringify = QueryString.encode = function(obj, sep, eq, options) {
202202
QueryString.parse = QueryString.decode = function(qs, sep, eq, options) {
203203
sep = sep || '&';
204204
eq = eq || '=';
205+
const eqLen = eq.length;
205206
var obj = {};
206207

207208
if (typeof qs !== 'string' || qs.length === 0) {
@@ -235,7 +236,7 @@ QueryString.parse = QueryString.decode = function(qs, sep, eq, options) {
235236

236237
if (idx >= 0) {
237238
k = decodeStr(x.substring(0, idx), decode);
238-
v = decodeStr(x.substring(idx + 1), decode);
239+
v = decodeStr(x.substring(idx + eqLen), decode);
239240
} else {
240241
k = decodeStr(x, decode);
241242
v = '';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
'use strict';
2+
const common = require('../common');
3+
const assert = require('assert');
4+
const qs = require('querystring');
5+
6+
assert.deepEqual(
7+
qs.parse('foo=>bar&&bar=>baz', '&&', '=>'),
8+
{foo: 'bar', bar: 'baz'}
9+
);
10+
11+
assert.strictEqual(
12+
qs.stringify({foo: 'bar', bar: 'baz'}, '&&', '=>'),
13+
'foo=>bar&&bar=>baz'
14+
);
15+
16+
assert.deepEqual(
17+
qs.parse('foo==>bar, bar==>baz', ', ', '==>'),
18+
{foo: 'bar', bar: 'baz'}
19+
);
20+
21+
assert.strictEqual(
22+
qs.stringify({foo: 'bar', bar: 'baz'}, ', ', '==>'),
23+
'foo==>bar, bar==>baz'
24+
);

0 commit comments

Comments
 (0)