Fix #1707 hasOwnProperty usage

If hasOwnProperty is overridden, then calling `obj.hasOwnProperty(prop)`
can fail.  Any time a dictionary of user-generated items is built, we
cannot rely on hasOwnProperty being safe, so must call it from the
Object.prototype explicitly.
This commit is contained in:
isaacs
2011-09-15 10:38:25 -07:00
parent b3af074a02
commit e06ce7562c
4 changed files with 16 additions and 7 deletions

View File

@@ -25,7 +25,10 @@ var QueryString = exports;
var urlDecode = process.binding('http_parser').urlDecode;
function hOP(obj, prop) {
// If obj.hasOwnProperty has been overridden, then calling
// obj.hasOwnProperty(prop) will break.
// See: https://github.com/joyent/node/issues/1707
function hasOwnProperty(obj, prop) {
return Object.prototype.hasOwnProperty.call(obj, prop);
}
@@ -171,7 +174,7 @@ QueryString.parse = QueryString.decode = function(qs, sep, eq) {
var k = QueryString.unescape(x[0], true);
var v = QueryString.unescape(x.slice(1).join(eq), true);
if (!hOP(obj, k)) {
if (!hasOwnProperty(obj, k)) {
obj[k] = v;
} else if (!Array.isArray(obj[k])) {
obj[k] = [obj[k], v];