From c1c2a9dd9d916f695189f08f008c5986f4e64580 Mon Sep 17 00:00:00 2001 From: Chris Dyson Date: Mon, 17 Sep 2018 10:45:31 +1200 Subject: [PATCH] [Fix] `stringify`: fix a crash with `strictNullHandling` and a custom `filter`/`serializeDate` (#279) --- lib/stringify.js | 4 +++- test/stringify.js | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/lib/stringify.js b/lib/stringify.js index ab915ac4..e8143120 100644 --- a/lib/stringify.js +++ b/lib/stringify.js @@ -48,7 +48,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 && !encodeValuesOnly ? encoder(prefix, defaults.encoder) : prefix; } diff --git a/test/stringify.js b/test/stringify.js index 165ac621..1c2a2237 100644 --- a/test/stringify.js +++ b/test/stringify.js @@ -593,5 +593,25 @@ test('stringify()', function (t) { 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(); });