From 41e53d9a8eb6e00e10544fe8f38b06065bdb4f25 Mon Sep 17 00:00:00 2001 From: Jamshid Afshar Date: Mon, 17 Nov 2014 03:29:22 -0600 Subject: [PATCH 1/3] fix($http): fix response headers with an empty value Empty response header values are legal (http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html). Return an empty string instead of null, which is returned when the header does not exist. Closes #7779 --- src/ng/http.js | 3 ++- test/ng/httpSpec.js | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/ng/http.js b/src/ng/http.js index 4a0a70d1f4a5..561512ea2a0e 100644 --- a/src/ng/http.js +++ b/src/ng/http.js @@ -63,7 +63,8 @@ function headersGetter(headers) { if (!headersObj) headersObj = parseHeaders(headers); if (name) { - return headersObj[lowercase(name)] || null; + name = lowercase(name); + return headersObj.hasOwnProperty(name) ? headersObj[name] : null; } return headersObj; diff --git a/test/ng/httpSpec.js b/test/ng/httpSpec.js index e4e7f86d28bb..c59409467714 100644 --- a/test/ng/httpSpec.js +++ b/test/ng/httpSpec.js @@ -816,6 +816,15 @@ describe('$http', function() { }); + it('should handle empty response header', function() { + $httpBackend.expect('GET', '/url', undefined) + .respond(200, '', { 'Custom-Empty-Response-Header': '' }); + $http.get('/url').success(callback); + $httpBackend.flush(); + expect(callback).toHaveBeenCalledOnce(); + expect(callback.mostRecentCall.args[2]('custom-empty-response-Header')).toBe(''); + }); + it('should have delete()', function() { $httpBackend.expect('DELETE', '/url').respond(''); $http['delete']('/url'); From 7eef329c2c69365128e134366b00a2f57370174d Mon Sep 17 00:00:00 2001 From: Jamshid Afshar Date: Mon, 17 Nov 2014 18:07:20 -0600 Subject: [PATCH 2/3] fix($http): fix response headers with an empty value Empty response header values are legal (http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html). Return an empty string instead of null, which is returned when the header does not exist. The "Constructor" test is failing, not sure how to fix. Closes #7779 --- src/ng/http.js | 2 +- test/ng/httpSpec.js | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/ng/http.js b/src/ng/http.js index 561512ea2a0e..4ab2bd09b78d 100644 --- a/src/ng/http.js +++ b/src/ng/http.js @@ -64,7 +64,7 @@ function headersGetter(headers) { if (name) { name = lowercase(name); - return headersObj.hasOwnProperty(name) ? headersObj[name] : null; + return Object.prototype.hasOwnProperty.call(headersObj, name) ? headersObj[name] : null; } return headersObj; diff --git a/test/ng/httpSpec.js b/test/ng/httpSpec.js index c59409467714..3aca14f62ec9 100644 --- a/test/ng/httpSpec.js +++ b/test/ng/httpSpec.js @@ -818,11 +818,13 @@ describe('$http', function() { it('should handle empty response header', function() { $httpBackend.expect('GET', '/url', undefined) - .respond(200, '', { 'Custom-Empty-Response-Header': '' }); + .respond(200, '', { 'Custom-Empty-Response-Header': '', 'Constructor': '' }); $http.get('/url').success(callback); $httpBackend.flush(); expect(callback).toHaveBeenCalledOnce(); expect(callback.mostRecentCall.args[2]('custom-empty-response-Header')).toBe(''); + expect(callback.mostRecentCall.args[2]('ToString')).toBe(null); + expect(callback.mostRecentCall.args[2]('Constructor')).toBe(''); }); it('should have delete()', function() { From a9d01b49b42b84663deec719fc5439946f9f7e0f Mon Sep 17 00:00:00 2001 From: Jamshid Afshar Date: Tue, 18 Nov 2014 14:19:47 -0600 Subject: [PATCH 3/3] fix($http): fix response headers with an empty value Empty response header values are legal (http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html). Return an empty string instead of null, which is returned when the header does not exist. Closes #7779 --- src/ng/http.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ng/http.js b/src/ng/http.js index 4ab2bd09b78d..bd56aa4837b7 100644 --- a/src/ng/http.js +++ b/src/ng/http.js @@ -26,7 +26,7 @@ function defaultHttpResponseTransform(data, headers) { * @returns {Object} Parsed headers as key value object */ function parseHeaders(headers) { - var parsed = {}, key, val, i; + var parsed = createMap(), key, val, i; if (!headers) return parsed; @@ -64,7 +64,7 @@ function headersGetter(headers) { if (name) { name = lowercase(name); - return Object.prototype.hasOwnProperty.call(headersObj, name) ? headersObj[name] : null; + return hasOwnProperty.call(headersObj, name) ? headersObj[name] : null; } return headersObj;