diff --git a/src/Angular.js b/src/Angular.js index 2f2c83ee986a..34a10571c2fd 100644 --- a/src/Angular.js +++ b/src/Angular.js @@ -1129,9 +1129,9 @@ function parseKeyValue(/**string*/keyValue) { forEach((keyValue || "").split('&'), function(keyValue) { if ( keyValue ) { key_value = keyValue.replace(/\+/g,'%20').split('='); - key = tryDecodeURIComponent(key_value[0]); + key = tryDecodeURIComponent(key_value.shift()); if ( isDefined(key) ) { - var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true; + var val = key_value.length > 0 ? tryDecodeURIComponent(key_value.join('=')) : true; if (!hasOwnProperty.call(obj, key)) { obj[key] = val; } else if(isArray(obj[key])) { diff --git a/test/AngularSpec.js b/test/AngularSpec.js index 657de1bd723b..f326ba5d88a4 100644 --- a/test/AngularSpec.js +++ b/test/AngularSpec.js @@ -505,6 +505,12 @@ describe('angular', function() { 'toString': '123' }); }); + + it('should ignore badly escaped = characters', function() { + expect(parseKeyValue('test=a=b')).toEqual({ + 'test': 'a=b' + }); + }); }); describe('toKeyValue', function() {