fix($http): don't encode URL query substring "null" to "+"

Fixes issue in encodeUriQuery used by $http and $resource that
treats null as a string and replaces the characters "null" with "+".
This commit is contained in:
Andrew McLeod 2013-02-25 21:25:18 -08:00 committed by Igor Minar
parent f98f8a3892
commit b13da18e11
4 changed files with 17 additions and 3 deletions

View file

@ -855,7 +855,7 @@ function encodeUriQuery(val, pctEncodeSpaces) {
replace(/%3A/gi, ':').
replace(/%24/g, '$').
replace(/%2C/gi, ',').
replace((pctEncodeSpaces ? null : /%20/g), '+');
replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
}

View file

@ -262,7 +262,7 @@ angular.module('ngResource', ['ng']).
replace(/%3A/gi, ':').
replace(/%24/g, '$').
replace(/%2C/gi, ',').
replace((pctEncodeSpaces ? null : /%20/g), '+');
replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
}
function Route(template, defaults) {

View file

@ -415,6 +415,14 @@ describe('angular', function() {
//encode ' ' as '%20' when a flag is used
expect(encodeUriQuery(' ', true)).
toEqual('%20%20');
//do not encode `null` as '+' when flag is used
expect(encodeUriQuery('null', true)).
toEqual('null');
//do not encode `null` with no flag
expect(encodeUriQuery('null')).
toEqual('null');
});
});
@ -673,7 +681,7 @@ describe('angular', function() {
toBe('<ng-abc x="2A">');
});
});
describe('startingTag', function() {
it('should allow passing in Nodes instead of Elements', function() {
var txtNode = document.createTextNode('some text');

View file

@ -122,6 +122,12 @@ describe("resource", function() {
R.get({a: 'doh@fo o', ':bar': '$baz@1', '!do&h': 'g=a h'});
});
it('should not encode string "null" to "+" in url params', function() {
var R = $resource('/Path/:a');
$httpBackend.expect('GET', '/Path/null').respond('{}');
R.get({a: 'null'});
});
it('should allow relative paths in resource url', function () {
var R = $resource(':relativePath');
$httpBackend.expect('GET', 'data.json').respond('{}');