From 0934b76b72cec86093414834ac4cb7f0946b651d Mon Sep 17 00:00:00 2001 From: Lucas Galfaso Date: Wed, 10 Jun 2015 12:43:24 +0200 Subject: [PATCH] fix(ngModel): form validation when there is an Object.prototype enumerable value When adding an Object.prototype enumerable property, this should not be confused as a form error Closes #12066 --- src/ng/directive/ngModel.js | 4 +++- test/ng/directive/ngModelSpec.js | 25 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/ng/directive/ngModel.js b/src/ng/directive/ngModel.js index 97b8d29fa384..83f6f91c9508 100644 --- a/src/ng/directive/ngModel.js +++ b/src/ng/directive/ngModel.js @@ -1351,7 +1351,9 @@ function addSetValidityMethod(context) { function isObjectEmpty(obj) { if (obj) { for (var prop in obj) { - return false; + if (obj.hasOwnProperty(prop)) { + return false; + } } } return true; diff --git a/test/ng/directive/ngModelSpec.js b/test/ng/directive/ngModelSpec.js index a5beb214f784..7f4bfc205dfb 100644 --- a/test/ng/directive/ngModelSpec.js +++ b/test/ng/directive/ngModelSpec.js @@ -1091,6 +1091,31 @@ describe('ngModel', function() { })); + it('should be possible to extend Object prototype and still be able to do form validation', + inject(function($compile, $rootScope) { + Object.prototype.someThing = function() {}; + var element = $compile('
' + + '' + + '
')($rootScope); + var inputElm = element.find('input'); + + var formCtrl = $rootScope.myForm; + var usernameCtrl = formCtrl.username; + + $rootScope.$digest(); + expect(usernameCtrl.$invalid).toBe(true); + expect(formCtrl.$invalid).toBe(true); + + usernameCtrl.$setViewValue('valid-username'); + $rootScope.$digest(); + + expect(usernameCtrl.$invalid).toBe(false); + expect(formCtrl.$invalid).toBe(false); + delete Object.prototype.someThing; + + dealoc(element); + })); + it('should re-evaluate the form validity state once the asynchronous promise has been delivered', inject(function($compile, $rootScope, $q) {