mirror of
https://github.com/zhigang1992/angular.js.git
synced 2026-01-12 22:45:52 +08:00
fix(parseKeyValue): ignore properties in prototype chain.
Previously, properties (typically functions) in the prototype chain (Object.prototype) would shadow query parameters, and cause them to be serialized incorrectly. This CL guards against this by using hasOwnProperty() to ensure that only own properties are a concern. Closes #8070 Fixes #8068
This commit is contained in:
@@ -1091,7 +1091,7 @@ function parseKeyValue(/**string*/keyValue) {
|
||||
key = tryDecodeURIComponent(key_value[0]);
|
||||
if ( isDefined(key) ) {
|
||||
var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true;
|
||||
if (!obj[key]) {
|
||||
if (!hasOwnProperty.call(obj, key)) {
|
||||
obj[key] = val;
|
||||
} else if(isArray(obj[key])) {
|
||||
obj[key].push(val);
|
||||
|
||||
@@ -480,6 +480,13 @@ describe('angular', function() {
|
||||
expect(parseKeyValue('flag1&flag1=value&flag1=value2&flag1')).
|
||||
toEqual({flag1: [true,'value','value2',true]});
|
||||
});
|
||||
|
||||
|
||||
it('should ignore properties higher in the prototype chain', function() {
|
||||
expect(parseKeyValue('toString=123')).toEqual({
|
||||
'toString': '123'
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('toKeyValue', function() {
|
||||
|
||||
Reference in New Issue
Block a user