mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
Added more restrictions for object keys transformations
Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/516
This commit is contained in:
+50
-1
@@ -89,6 +89,50 @@ export abstract class AbstractPropertiesExtractor implements IPropertiesExtracto
|
||||
|| NodeGuards.isRestElementNode(node);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {ObjectExpression} objectExpressionNode
|
||||
* @param {Statement} hostStatement
|
||||
* @returns {boolean}
|
||||
*/
|
||||
protected static isProhibitedHostStatement (
|
||||
objectExpressionNode: ESTree.ObjectExpression,
|
||||
hostStatement: ESTree.Statement
|
||||
): boolean {
|
||||
if (AbstractPropertiesExtractor.isProhibitedVariableDeclarationHostStatement(objectExpressionNode, hostStatement)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fix of https://github.com/javascript-obfuscator/javascript-obfuscator/issues/516
|
||||
* If object expression is placed inside any expression inside variable declaration with 2+ declarators
|
||||
* - should mark host node as prohibited
|
||||
*
|
||||
* @param {ObjectExpression} objectExpressionNode
|
||||
* @param {Statement} hostStatement
|
||||
* @returns {boolean}
|
||||
*/
|
||||
protected static isProhibitedVariableDeclarationHostStatement (
|
||||
objectExpressionNode: ESTree.ObjectExpression,
|
||||
hostStatement: ESTree.Statement
|
||||
): boolean {
|
||||
if (!NodeGuards.isVariableDeclarationNode(hostStatement)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (objectExpressionNode.parentNode && NodeGuards.isVariableDeclaratorNode(objectExpressionNode.parentNode)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (hostStatement.declarations.length <= 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {ObjectExpression} objectExpressionNode
|
||||
* @param {Node} hostNode
|
||||
@@ -182,11 +226,16 @@ export abstract class AbstractPropertiesExtractor implements IPropertiesExtracto
|
||||
objectExpressionNode: ESTree.ObjectExpression,
|
||||
memberExpressionHostNode: ESTree.Expression
|
||||
): ESTree.Node {
|
||||
const hostStatement: ESTree.Statement = this.getHostStatement(objectExpressionNode);
|
||||
|
||||
if (AbstractPropertiesExtractor.isProhibitedHostStatement(objectExpressionNode, hostStatement)) {
|
||||
return objectExpressionNode;
|
||||
}
|
||||
|
||||
const properties: ESTree.Property[] = objectExpressionNode.properties;
|
||||
const [expressionStatements, removablePropertyIds]: [ESTree.ExpressionStatement[], number[]] = this
|
||||
.extractPropertiesToExpressionStatements(properties, memberExpressionHostNode);
|
||||
|
||||
const hostStatement: ESTree.Statement = this.getHostStatement(objectExpressionNode);
|
||||
const hostNodeWithStatements: TNodeWithStatements = this.getHostNodeWithStatements(
|
||||
objectExpressionNode,
|
||||
hostStatement
|
||||
|
||||
+6
-1
@@ -67,6 +67,12 @@ export class BasePropertiesExtractor extends AbstractPropertiesExtractor {
|
||||
objectExpressionNode: ESTree.ObjectExpression,
|
||||
parentNode: ESTree.Node
|
||||
): ESTree.Node {
|
||||
const hostStatement: ESTree.Statement = this.getHostStatement(objectExpressionNode);
|
||||
|
||||
if (AbstractPropertiesExtractor.isProhibitedHostStatement(objectExpressionNode, hostStatement)) {
|
||||
return objectExpressionNode;
|
||||
}
|
||||
|
||||
const newObjectExpressionHostNode: ESTree.VariableDeclaration = this.getObjectExpressionHostNode();
|
||||
const newObjectExpressionIdentifier: ESTree.Identifier = this.getObjectExpressionIdentifierNode(newObjectExpressionHostNode);
|
||||
|
||||
@@ -79,7 +85,6 @@ export class BasePropertiesExtractor extends AbstractPropertiesExtractor {
|
||||
...expressionStatements
|
||||
];
|
||||
|
||||
const hostStatement: ESTree.Statement = this.getHostStatement(objectExpressionNode);
|
||||
const hostNodeWithStatements: TNodeWithStatements = this.getHostNodeWithStatements(
|
||||
objectExpressionNode,
|
||||
hostStatement
|
||||
|
||||
Reference in New Issue
Block a user