aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew McLeod2013-02-25 21:25:18 -0800
committerIgor Minar2013-02-26 17:25:15 -0800
commit86d191ed4aea9015adc71b852223475c5c762c34 (patch)
tree2d07565c9be92371890595c5dcce5071cef9d53f
parentc38c1c503074af1b0aae7498b9381cb90cd63958 (diff)
downloadangular.js-86d191ed4aea9015adc71b852223475c5c762c34.tar.bz2
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 "+".
-rw-r--r--src/Angular.js2
-rw-r--r--src/ngResource/resource.js2
-rw-r--r--test/AngularSpec.js16
-rw-r--r--test/ngResource/resourceSpec.js6
4 files changed, 20 insertions, 6 deletions
diff --git a/src/Angular.js b/src/Angular.js
index 6ea5d1ad..5de57075 100644
--- a/src/Angular.js
+++ b/src/Angular.js
@@ -875,7 +875,7 @@ function encodeUriQuery(val, pctEncodeSpaces) {
replace(/%3A/gi, ':').
replace(/%24/g, '$').
replace(/%2C/gi, ',').
- replace((pctEncodeSpaces ? null : /%20/g), '+');
+ replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
}
diff --git a/src/ngResource/resource.js b/src/ngResource/resource.js
index 0bcf4cce..ca92e629 100644
--- a/src/ngResource/resource.js
+++ b/src/ngResource/resource.js
@@ -300,7 +300,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) {
diff --git a/test/AngularSpec.js b/test/AngularSpec.js
index aed191e7..cc752b6c 100644
--- a/test/AngularSpec.js
+++ b/test/AngularSpec.js
@@ -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');
@@ -741,11 +749,11 @@ describe('angular', function() {
describe('noConflict', function() {
var globalAngular;
beforeEach(function() {
- globalAngular = angular;
+ globalAngular = angular;
});
afterEach(function() {
- angular = globalAngular;
+ angular = globalAngular;
});
it('should return angular', function() {
@@ -757,7 +765,7 @@ describe('angular', function() {
var a = angular.noConflict();
expect(angular).toBeUndefined();
});
-
+
});
});
diff --git a/test/ngResource/resourceSpec.js b/test/ngResource/resourceSpec.js
index 3f2df284..e5366f4f 100644
--- a/test/ngResource/resourceSpec.js
+++ b/test/ngResource/resourceSpec.js
@@ -136,6 +136,12 @@ describe("resource", function() {
R.get({a: 'doh&foo', bar: ['baz1', 'baz2']});
});
+ 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('{}');