Skip to content

querystring: using toString for objects on querystring.escape

querystring.encode unexpected behavior on objects, see #5309 (closed)

here is specs for encodeURIComponent - http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3.4, so object must be casted to string via toString, not via valueOf.

const qs = require('querystring');

const testObject = { toString: () => 'test', valueOf: () => 5 };

console.log('expected', encodeURIComponent(testObject));   // 'test'
console.log('actual',   qs.escape(testObject));            // 5

Here is why:

> '' + {toString: () => 'test', valueOf: () => 5}
5

String({toString: () => 'test', valueOf: () => 5})
'test'

Merge request reports

Loading