Prevent properties with get and set kinds from extraction with transformObjectKeys option. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/707

This commit is contained in:
sanex
2020-08-14 20:52:53 +03:00
parent 85e8e6c852
commit 9ff565f4e3
8 changed files with 67 additions and 10 deletions
@@ -39,6 +39,14 @@ export class BasePropertiesExtractor implements IObjectExpressionExtractor {
return null;
}
/**
* @param {Property} node
* @returns {boolean}
*/
private static isProhibitedPropertyNode (node: ESTree.Property): boolean {
return node.kind !== 'init';
}
/**
* @param {Node} node
* @returns {propertyValueNode is Pattern}
@@ -51,6 +59,15 @@ export class BasePropertiesExtractor implements IObjectExpressionExtractor {
|| NodeGuards.isRestElementNode(node);
}
/**
* @param {Property} property
* @returns {boolean}
*/
private static shouldCreateLiteralNode (property: ESTree.Property): boolean {
return !property.computed
|| (property.computed && !!property.key && NodeGuards.isLiteralNode(property.key));
}
/**
* extracts object expression properties:
* var _0xabc123 = {
@@ -138,13 +155,14 @@ export class BasePropertiesExtractor implements IObjectExpressionExtractor {
for (let i: number = 0; i < propertiesLength; i++) {
const property: (ESTree.Property | ESTree.SpreadElement) = properties[i];
if (!NodeGuards.isPropertyNode(property)) {
// invalid property node
if (!NodeGuards.isPropertyNode(property) || BasePropertiesExtractor.isProhibitedPropertyNode(property)) {
continue;
}
const propertyValue: ESTree.Expression | ESTree.Pattern = property.value;
// invalid property nodes
// invalid property node value
if (BasePropertiesExtractor.isProhibitedPattern(propertyValue)) {
continue;
}
@@ -161,8 +179,7 @@ export class BasePropertiesExtractor implements IObjectExpressionExtractor {
/**
* Stage 2: creating new expression statement node with member expression based on removed property
*/
const shouldCreateLiteralNode: boolean = !property.computed
|| (property.computed && !!property.key && NodeGuards.isLiteralNode(property.key));
const shouldCreateLiteralNode: boolean = BasePropertiesExtractor.shouldCreateLiteralNode(property);
const memberExpressionProperty: ESTree.Expression = shouldCreateLiteralNode
? NodeFactory.literalNode(propertyKeyName)
: NodeFactory.identifierNode(propertyKeyName);