From 28b2dbd1d293f1a0781f889e2d41fda2dc6f57c0 Mon Sep 17 00:00:00 2001 From: a510 Date: Fri, 1 Apr 2016 23:13:35 +0200 Subject: [PATCH 1/3] refactor(injector): make sure we call Function.prototype.toString not an override use Function.prototype.toString.call instead of fn.toString, because the user might override the toString function of the "fn" instance, without knowing it's being used by the injector. --- src/auto/injector.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/auto/injector.js b/src/auto/injector.js index 57b311f66c7e..e30a2fe89427 100644 --- a/src/auto/injector.js +++ b/src/auto/injector.js @@ -70,7 +70,7 @@ var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; var $injectorMinErr = minErr('$injector'); function extractArgs(fn) { - var fnText = fn.toString().replace(STRIP_COMMENTS, ''), + var fnText = Function.prototype.toString.call(fn).replace(STRIP_COMMENTS, ''), args = fnText.match(ARROW_ARG) || fnText.match(FN_ARGS); return args; } From c00cc16544f462d94c623ddfd8f652c81bdd7e9e Mon Sep 17 00:00:00 2001 From: a510 Date: Wed, 6 Apr 2016 05:28:42 +0200 Subject: [PATCH 2/3] test(injector): make sure annotate can handle functions with overridden toString --- test/auto/injectorSpec.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/test/auto/injectorSpec.js b/test/auto/injectorSpec.js index fdd455a35247..59f8665d7820 100644 --- a/test/auto/injectorSpec.js +++ b/test/auto/injectorSpec.js @@ -240,7 +240,13 @@ describe('injector', function() { expect(annotate($f_n0)).toEqual(['$a_']); expect($f_n0.$inject).toEqual(['$a_']); }); - + + it('should handle functions with overridden toString', function() { + function fn(a) {} + fn.toString = function () { return 'fn'; }; + expect(annotate(fn)).toEqual(['a']); + expect(fn.$inject).toEqual(['a']); + }); it('should throw on non function arg', function() { expect(function() { From a188c473d6423ad1b7920e966f6185ba5ebf671b Mon Sep 17 00:00:00 2001 From: a510 Date: Wed, 6 Apr 2016 05:47:40 +0200 Subject: [PATCH 3/3] style(injector): remove unnecessary whitespaces --- test/auto/injectorSpec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/auto/injectorSpec.js b/test/auto/injectorSpec.js index 59f8665d7820..f70695012903 100644 --- a/test/auto/injectorSpec.js +++ b/test/auto/injectorSpec.js @@ -240,10 +240,10 @@ describe('injector', function() { expect(annotate($f_n0)).toEqual(['$a_']); expect($f_n0.$inject).toEqual(['$a_']); }); - + it('should handle functions with overridden toString', function() { function fn(a) {} - fn.toString = function () { return 'fn'; }; + fn.toString = function() { return 'fn'; }; expect(annotate(fn)).toEqual(['a']); expect(fn.$inject).toEqual(['a']); });