querystring: parse numbers correctly
authorJeremiah Senkpiel <fishrock123@rocketmail.com>
Thu, 19 Mar 2015 22:51:55 +0000 (18:51 -0400)
committerJeremiah Senkpiel <fishrock123@rocketmail.com>
Fri, 20 Mar 2015 01:45:38 +0000 (21:45 -0400)
Fixes a number parsing regression introduced in 85a92a3

Fixes: https://github.com/iojs/io.js/issues/1208
PR-URL: https://github.com/iojs/io.js/pull/1213
Reviewed-By: Rod Vagg <rod@vagg.org>
Reviewed-By: Brian White <mscdex@mscdex.net>
lib/querystring.js
test/parallel/test-querystring.js

index af320cf..f0d473a 100644 (file)
@@ -90,6 +90,9 @@ var hexTable = new Array(256);
 for (var i = 0; i < 256; ++i)
   hexTable[i] = '%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase();
 QueryString.escape = function(str) {
+  // replaces encodeURIComponent
+  // http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3.4
+  str = '' + str;
   var len = str.length;
   var out = '';
   var i, c;
index e2591d7..17fa6df 100644 (file)
@@ -138,6 +138,14 @@ qsWeirdObjects.forEach(function(testCase) {
   assert.equal(testCase[1], qs.stringify(testCase[0]));
 });
 
+// coerce numbers to string
+assert.strictEqual('foo=0', qs.stringify({ foo: 0 }));
+assert.strictEqual('foo=0', qs.stringify({ foo: -0 }));
+assert.strictEqual('foo=3', qs.stringify({ foo: 3 }));
+assert.strictEqual('foo=-72.42', qs.stringify({ foo: -72.42 }));
+assert.strictEqual('foo=', qs.stringify({ foo: NaN }));
+assert.strictEqual('foo=', qs.stringify({ foo: Infinity }));
+
 // nested
 var f = qs.stringify({
   a: 'b',