diff options
| author | Andrew McLeod | 2013-02-25 21:25:18 -0800 | 
|---|---|---|
| committer | Igor Minar | 2013-02-26 17:25:15 -0800 | 
| commit | 86d191ed4aea9015adc71b852223475c5c762c34 (patch) | |
| tree | 2d07565c9be92371890595c5dcce5071cef9d53f | |
| parent | c38c1c503074af1b0aae7498b9381cb90cd63958 (diff) | |
| download | angular.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.js | 2 | ||||
| -rw-r--r-- | src/ngResource/resource.js | 2 | ||||
| -rw-r--r-- | test/AngularSpec.js | 16 | ||||
| -rw-r--r-- | test/ngResource/resourceSpec.js | 6 | 
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('{}'); | 
