Skip to content

Commit

Permalink
[Fix] stringify: fix a crash with strictNullHandling and a custom…
Browse files Browse the repository at this point in the history
… `filter`/`serializeDate` (#279)
  • Loading branch information
Neaox authored and ljharb committed Sep 16, 2018
1 parent 471261a commit 47e46a6
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 13 deletions.
4 changes: 3 additions & 1 deletion lib/stringify.js
Expand Up @@ -46,7 +46,9 @@ var stringify = function stringify( // eslint-disable-line func-name-matching
obj = filter(prefix, obj);
} else if (obj instanceof Date) {
obj = serializeDate(obj);
} else if (obj === null) {
}

if (obj === null) {
if (strictNullHandling) {
return encoder ? encoder(prefix) : prefix;
}
Expand Down
44 changes: 32 additions & 12 deletions test/stringify.js
Expand Up @@ -453,7 +453,7 @@ test('stringify()', function (t) {
});

t.test('throws error with wrong encoder', function (st) {
st.throws(function () {
st['throws'](function () {
qs.stringify({}, { encoder: 'string' });
}, new TypeError('Encoder has to be a function.'));
st.end();
Expand Down Expand Up @@ -483,7 +483,7 @@ test('stringify()', function (t) {
mutatedDate.toISOString = function () {
throw new SyntaxError();
};
st.throws(function () {
st['throws'](function () {
mutatedDate.toISOString();
}, SyntaxError);
st.equal(
Expand Down Expand Up @@ -523,16 +523,36 @@ test('stringify()', function (t) {
});

t.test('Edge cases and unknown formats', function (st) {
['UFO1234', false, 1234, null, {}, []].forEach(
function (format) {
st.throws(
function () {
qs.stringify({ a: 'b c' }, { format: format });
},
new TypeError('Unknown format option provided.')
);
}
);
['UFO1234', false, 1234, null, {}, []].forEach(function (format) {
st['throws'](
function () {
qs.stringify({ a: 'b c' }, { format: format });
},
new TypeError('Unknown format option provided.')
);
});
st.end();
});

t.test('strictNullHandling works with custom filter', function (st) {
var filter = function (prefix, value) {
return value;
};

var options = { strictNullHandling: true, filter: filter };
st.equal(qs.stringify({ key: null }, options), 'key');
st.end();
});

t.test('strictNullHandling works with null serializeDate', function (st) {
var serializeDate = function () {
return null;
};
var options = { strictNullHandling: true, serializeDate: serializeDate };
var date = new Date();
st.equal(qs.stringify({ key: date }, options), 'key');
st.end();
});

t.end();
});

0 comments on commit 47e46a6

Please sign in to comment.