fix: use String(field) in lookup when checking for "constructor"
closes #1603
This commit is contained in:
committed by
Nils Knappmeier
parent
c2ac79c970
commit
d54137810a
@@ -3,7 +3,7 @@ export default function(instance) {
|
|||||||
if (!obj) {
|
if (!obj) {
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
if (field === 'constructor' && !obj.propertyIsEnumerable(field)) {
|
if (String(field) === 'constructor' && !obj.propertyIsEnumerable(field)) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
return obj[field];
|
return obj[field];
|
||||||
|
|||||||
+25
-3
@@ -1,11 +1,26 @@
|
|||||||
describe('security issues', function() {
|
describe('security issues', function() {
|
||||||
describe('GH-1495: Prevent Remote Code Execution via constructor', function() {
|
describe('GH-1495: Prevent Remote Code Execution via constructor', function() {
|
||||||
it('should not allow constructors to be accessed', function() {
|
it('should not allow constructors to be accessed', function() {
|
||||||
shouldCompileTo('{{constructor.name}}', {}, '');
|
expectTemplate('{{lookup (lookup this "constructor") "name"}}')
|
||||||
shouldCompileTo('{{lookup (lookup this "constructor") "name"}}', {}, '');
|
.withInput({})
|
||||||
|
.toCompileTo('');
|
||||||
|
|
||||||
|
expectTemplate('{{constructor.name}}')
|
||||||
|
.withInput({})
|
||||||
|
.toCompileTo('');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should allow the "constructor" property to be accessed if it is enumerable', function() {
|
it('GH-1603: should not allow constructors to be accessed (lookup via toString)', function() {
|
||||||
|
expectTemplate('{{lookup (lookup this (list "constructor")) "name"}}')
|
||||||
|
.withInput({})
|
||||||
|
.withHelper('list', function(element) {
|
||||||
|
return [element];
|
||||||
|
})
|
||||||
|
.toCompileTo('');
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
it('should allow the "constructor" property to be accessed if it is enumerable', function() {
|
||||||
shouldCompileTo('{{constructor.name}}', {'constructor': {
|
shouldCompileTo('{{constructor.name}}', {'constructor': {
|
||||||
'name': 'here we go'
|
'name': 'here we go'
|
||||||
}}, 'here we go');
|
}}, 'here we go');
|
||||||
@@ -14,6 +29,13 @@ describe('security issues', function() {
|
|||||||
}}, 'here we go');
|
}}, 'here we go');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should allow the "constructor" property to be accessed if it is enumerable', function() {
|
||||||
|
shouldCompileTo('{{lookup (lookup this "constructor") "name"}}', {'constructor': {
|
||||||
|
'name': 'here we go'
|
||||||
|
}}, 'here we go');
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
it('should allow prototype properties that are not constructors', function() {
|
it('should allow prototype properties that are not constructors', function() {
|
||||||
function TestClass() {
|
function TestClass() {
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user