Skip to content

Commit a4b9fb7

Browse files
#863 Add "hasOwnProperty" guard to all "for .. in" statements
1 parent d3d5167 commit a4b9fb7

17 files changed

+45
-0
lines changed

Diff for: src/javascripts/ng-admin/Crud/button/maExportToCsvButton.js

+1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export default function maExportToCsvButton ($stateParams, Papa, notification, A
3939
.then(referenceData => {
4040
const references = exportView.getReferences();
4141
for (var name in referenceData) {
42+
if (!referenceData.hasOwnProperty(name)) continue;
4243
AdminDescription.getEntryConstructor().createArrayFromRest(
4344
referenceData[name],
4445
[references[name].targetField()],

Diff for: src/javascripts/ng-admin/Crud/field/maButtonField.js

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export default function maButtonField() {
1818
var a = element.children()[0];
1919
var attributes = field.attributes();
2020
for (var name in attributes) {
21+
if (!attributes.hasOwnProperty(name)) continue;
2122
a.setAttribute(name, attributes[name]);
2223
}
2324
scope.toggle = function() {

Diff for: src/javascripts/ng-admin/Crud/field/maCheckboxField.js

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export default function maCheckboxField() {
1818
var input = element.children()[0];
1919
var attributes = field.attributes();
2020
for (var name in attributes) {
21+
if (!attributes.hasOwnProperty(name)) continue;
2122
input.setAttribute(name, attributes[name]);
2223
}
2324
},

Diff for: src/javascripts/ng-admin/Crud/field/maChoiceField.js

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ export default function maChoiceField($compile) {
5252

5353
var select = element.children()[0];
5454
for (var name in attributes) {
55+
if (!attributes.hasOwnProperty(name)) continue;
5556
select.setAttribute(name, attributes[name]);
5657
}
5758

Diff for: src/javascripts/ng-admin/Crud/field/maChoicesField.js

+1
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ export default function maChoicesField($compile) {
4848
var select = element.children()[0];
4949

5050
for (var name in attributes) {
51+
if (!attributes.hasOwnProperty(name)) continue;
5152
select.setAttribute(name, attributes[name]);
5253
}
5354

Diff for: src/javascripts/ng-admin/Crud/field/maDateField.js

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ export default function maDateField() {
2727
var input = element.find('input').eq(0);
2828
var attributes = field.attributes();
2929
for (var name in attributes) {
30+
if (!attributes.hasOwnProperty(name)) continue;
3031
input.attr(name, attributes[name]);
3132
}
3233
scope.toggleDatePicker = function ($event) {

Diff for: src/javascripts/ng-admin/Crud/field/maFileField.js

+3
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ export default function maFileField(Upload) {
2727
var files = scope.value ? scope.value.split(',') : [];
2828
scope.files = {};
2929
for (var file in files) {
30+
if (!files.hasOwnProperty(file)) continue;
3031
scope.files[files[file]] = {
3132
"name": files[file],
3233
"progress": 0
@@ -43,6 +44,7 @@ export default function maFileField(Upload) {
4344
var input = element.find('input')[0];
4445
var attributes = field.attributes();
4546
for (var name in attributes) {
47+
if (!attributes.hasOwnProperty(name)) continue;
4648
input.setAttribute(name, attributes[name]);
4749
}
4850

@@ -55,6 +57,7 @@ export default function maFileField(Upload) {
5557

5658
scope.files = {};
5759
for (var file in selectedFiles) {
60+
if (!selectedFiles.hasOwnProperty(file)) continue;
5861
uploadParams = angular.copy(scope.field().uploadInformation());
5962
uploadParams.file = selectedFiles[file];
6063
Upload

Diff for: src/javascripts/ng-admin/Crud/field/maInputField.js

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export default function maInputField() {
1919
var input = element.children()[0];
2020
var attributes = field.attributes();
2121
for (var name in attributes) {
22+
if (!attributes.hasOwnProperty(name)) continue;
2223
if (name === 'step') { // allow to use `step` attribute instead of `scope.step`
2324
scope.step = attributes[name];
2425
continue;

Diff for: src/javascripts/ng-admin/Crud/field/maJsonField.js

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ export default function maJsonField() {
4040
var input = element.children()[0];
4141
var attributes = field.attributes();
4242
for (var name in attributes) {
43+
if (!attributes.hasOwnProperty(name)) continue;
4344
input.setAttribute(name, attributes[name]);
4445
}
4546
scope.$watch('jsonValue', function(jsonValue) {

Diff for: src/javascripts/ng-admin/Crud/field/maTextField.js

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export default function maTextField() {
1717
var input = element.children()[0];
1818
var attributes = field.attributes();
1919
for (var name in attributes) {
20+
if (!attributes.hasOwnProperty(name)) continue;
2021
input.setAttribute(name, attributes[name]);
2122
}
2223
},

Diff for: src/javascripts/ng-admin/Crud/list/ListController.js

+1
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ export default class ListController {
5757
this.progression.done();
5858

5959
for (var name in referenceData) {
60+
if (!referenceData.hasOwnProperty(name)) continue;
6061
Entry.createArrayFromRest(
6162
referenceData[name],
6263
[references[name].targetField()],

Diff for: src/javascripts/ng-admin/Crud/list/ListLayoutController.js

+1
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ export default class ListLayoutController {
8888
field,
8989
i;
9090
for (i in filters) {
91+
if (!filters.hasOwnProperty(i)) continue;
9192
field = filters[i];
9293
fieldName = field.name();
9394
if (this.search[fieldName] === '') {

Diff for: src/javascripts/ng-admin/Crud/routing.js

+10
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ function routing($stateProvider) {
5959
filterEntries: ['dataStore', 'view', 'filterData', function (dataStore, view, filterData) {
6060
const filters = view.getFilterReferences(false);
6161
for (var name in filterData) {
62+
if (!filterData.hasOwnProperty(name)) continue;
6263
Entry.createArrayFromRest(
6364
filterData[name],
6465
[filters[name].targetField()],
@@ -103,6 +104,7 @@ function routing($stateProvider) {
103104
referenceEntries: ['dataStore', 'view', 'referenceData', function (dataStore, view, referenceData) {
104105
const references = view.getReferences();
105106
for (var name in referenceData) {
107+
if (!referenceData.hasOwnProperty(name)) continue;
106108
Entry.createArrayFromRest(
107109
referenceData[name],
108110
[references[name].targetField()],
@@ -170,6 +172,7 @@ function routing($stateProvider) {
170172
referenceEntries: ['dataStore', 'view', 'referenceData', function (dataStore, view, referenceData) {
171173
const references = view.getReferences();
172174
for (var name in referenceData) {
175+
if (!referenceData.hasOwnProperty(name)) continue;
173176
Entry.createArrayFromRest(
174177
referenceData[name],
175178
[references[name].targetField()],
@@ -184,6 +187,7 @@ function routing($stateProvider) {
184187
referencedListEntries: ['dataStore', 'view', 'referencedListData', function (dataStore, view, referencedListData) {
185188
const referencedLists = view.getReferencedLists();
186189
for (var name in referencedLists) {
190+
if (!referencedLists.hasOwnProperty(name)) continue;
187191
Entry.createArrayFromRest(
188192
referencedListData[name],
189193
referencedLists[name].targetFields(),
@@ -209,6 +213,7 @@ function routing($stateProvider) {
209213
Object.keys(referencedLists).map(referencedListName => {
210214
const references = referencedLists[referencedListName].getReferences();
211215
for (var name in references) {
216+
if (!references.hasOwnProperty(name)) continue;
212217
if (!referenceDataForReferencedLists[referencedListName][name]) continue;
213218
Entry.createArrayFromRest(
214219
referenceDataForReferencedLists[referencedListName][name],
@@ -263,6 +268,7 @@ function routing($stateProvider) {
263268
choiceEntries: ['dataStore', 'view', 'choiceData', function (dataStore, view, filterData) {
264269
const choices = view.getReferences(false);
265270
for (var name in filterData) {
271+
if (!filterData.hasOwnProperty(name)) continue;
266272
Entry.createArrayFromRest(
267273
filterData[name],
268274
[choices[name].targetField()],
@@ -314,6 +320,7 @@ function routing($stateProvider) {
314320
referenceEntries: ['dataStore', 'view', 'referenceData', function (dataStore, view, referenceData) {
315321
const references = view.getReferences();
316322
for (var name in referenceData) {
323+
if (!referenceData.hasOwnProperty(name)) continue;
317324
Entry.createArrayFromRest(
318325
referenceData[name],
319326
[references[name].targetField()],
@@ -328,6 +335,7 @@ function routing($stateProvider) {
328335
referencedListEntries: ['dataStore', 'view', 'referencedListData', function (dataStore, view, referencedListData) {
329336
const referencedLists = view.getReferencedLists();
330337
for (var name in referencedLists) {
338+
if (!referencedLists.hasOwnProperty(name)) continue;
331339
Entry.createArrayFromRest(
332340
referencedListData[name],
333341
referencedLists[name].targetFields(),
@@ -346,6 +354,7 @@ function routing($stateProvider) {
346354
choiceEntries: ['dataStore', 'view', 'choiceData', function (dataStore, view, filterData) {
347355
const choices = view.getReferences(false);
348356
for (var name in filterData) {
357+
if (!filterData.hasOwnProperty(name)) continue;
349358
Entry.createArrayFromRest(
350359
filterData[name],
351360
[choices[name].targetField()],
@@ -367,6 +376,7 @@ function routing($stateProvider) {
367376
Object.keys(referencedLists).map(referencedListName => {
368377
const references = referencedLists[referencedListName].getReferences();
369378
for (var name in references) {
379+
if (!references.hasOwnProperty(name)) continue;
370380
if (!referenceDataForReferencedLists[referencedListName][name]) continue;
371381
Entry.createArrayFromRest(
372382
referenceDataForReferencedLists[referencedListName][name],

Diff for: src/javascripts/ng-admin/Main/component/filter/OrderElement.js

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export default function OrderElement() {
44
objectKey;
55

66
for (objectKey in input) {
7+
if (!input.hasOwnProperty(objectKey)) continue;
78
results.push(input[objectKey]);
89
}
910

Diff for: src/javascripts/ng-admin/Main/config/routing.js

+3
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ function routing($stateProvider, $urlRouterProvider) {
5757
collectionName;
5858

5959
for (collectionName in collections) {
60+
if (!collections.hasOwnProperty(collectionName)) continue;
6061
collection = collections[collectionName];
6162
collectionSortField = collection.getSortFieldName();
6263
collectionSortDir = collection.sortDir();
@@ -77,6 +78,7 @@ function routing($stateProvider, $urlRouterProvider) {
7778
.then(referenceData => {
7879
const references = collection.getReferences();
7980
for (var name in referenceData) {
81+
if (!referenceData.hasOwnProperty(name)) continue;
8082
Entry.createArrayFromRest(
8183
referenceData[name],
8284
[references[name].targetField()],
@@ -103,6 +105,7 @@ function routing($stateProvider, $urlRouterProvider) {
103105
entries = {};
104106

105107
for (collectionName in responses) {
108+
if (!responses.hasOwnProperty(collectionName)) continue;
106109
entries[collections[collectionName].name()] = responses[collectionName];
107110
}
108111

Diff for: src/javascripts/test/before_all.js

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
2+
if (!Object.prototype.test_prototype_entry) {
3+
Object.prototype.test_prototype_entry =
4+
"Don't use for..in to enumerate Object properties, as users are free to " +
5+
"add entries to the Object prototype, for example for polyfills. " +
6+
"You should instead use\n" +
7+
" for (let i in xs) { if (!xs.hasOwnProperty(i)) continue; var x = xs[i]; ... }";
8+
}
9+
10+
if (!Array.prototype.test_prototype_entry) {
11+
Array.prototype.test_prototype_entry =
12+
"Don't use for..in to enumerate Array properties, as users are free to " +
13+
"add entries to the Array prototype, for example for polyfills. " +
14+
"You should instead use\n" +
15+
" for (let i in xs) { if (!xs.hasOwnProperty(i)) continue; var x = xs[i]; ... }";
16+
}

Diff for: src/javascripts/test/karma.conf.js

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ module.exports = function (config) {
2222

2323
'ng-admin.js',
2424
'test/function.bind.shim.js',
25+
'test/before_all.js',
2526
'test/unit/**/*.js'
2627
],
2728
plugins: ['karma-webpack', 'karma-jasmine', 'karma-chrome-launcher', 'karma-phantomjs-launcher'],

0 commit comments

Comments
 (0)