Browse Source

querystring: Parse multiple separator characters

Fix querystring.parse to handle multiple separator characters

PR-URL: https://github.com/nodejs/node/pull/3807
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Brian White <mscdex@mscdex.net>
Reviewed-By: James M Snell <jasnell@gmail.com>
process-exit-stdio-flushing
Yosuke Furukawa 9 years ago
committed by James M Snell
parent
commit
a776a86859
  1. 3
      lib/querystring.js
  2. 24
      test/parallel/test-querystring-multichar-separator.js

3
lib/querystring.js

@ -202,6 +202,7 @@ QueryString.stringify = QueryString.encode = function(obj, sep, eq, options) {
QueryString.parse = QueryString.decode = function(qs, sep, eq, options) {
sep = sep || '&';
eq = eq || '=';
const eqLen = eq.length;
var obj = {};
if (typeof qs !== 'string' || qs.length === 0) {
@ -235,7 +236,7 @@ QueryString.parse = QueryString.decode = function(qs, sep, eq, options) {
if (idx >= 0) {
k = decodeStr(x.substring(0, idx), decode);
v = decodeStr(x.substring(idx + 1), decode);
v = decodeStr(x.substring(idx + eqLen), decode);
} else {
k = decodeStr(x, decode);
v = '';

24
test/parallel/test-querystring-multichar-separator.js

@ -0,0 +1,24 @@
'use strict';
const common = require('../common');
const assert = require('assert');
const qs = require('querystring');
assert.deepEqual(
qs.parse('foo=>bar&&bar=>baz', '&&', '=>'),
{foo: 'bar', bar: 'baz'}
);
assert.strictEqual(
qs.stringify({foo: 'bar', bar: 'baz'}, '&&', '=>'),
'foo=>bar&&bar=>baz'
);
assert.deepEqual(
qs.parse('foo==>bar, bar==>baz', ', ', '==>'),
{foo: 'bar', bar: 'baz'}
);
assert.strictEqual(
qs.stringify({foo: 'bar', bar: 'baz'}, ', ', '==>'),
'foo==>bar, bar==>baz'
);
Loading…
Cancel
Save