mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
Prevented transformation of object keys in sequence expression that has super call
This commit is contained in:
@@ -58,9 +58,13 @@ export class ObjectExpressionKeysTransformer extends AbstractNodeTransformer {
|
||||
hostStatement: ESTree.Statement
|
||||
): boolean {
|
||||
return ObjectExpressionKeysTransformer.isReferencedIdentifierName(
|
||||
objectExpressionNode,
|
||||
hostStatement
|
||||
);
|
||||
objectExpressionNode,
|
||||
hostStatement
|
||||
)
|
||||
|| ObjectExpressionKeysTransformer.isProhibitedSequenceExpression(
|
||||
objectExpressionNode,
|
||||
hostStatement
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -110,6 +114,23 @@ export class ObjectExpressionKeysTransformer extends AbstractNodeTransformer {
|
||||
return isReferencedIdentifierName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {ObjectExpression} objectExpressionNode
|
||||
* @param {Node} hostNode
|
||||
* @returns {boolean}
|
||||
*/
|
||||
private static isProhibitedSequenceExpression (
|
||||
objectExpressionNode: ESTree.ObjectExpression,
|
||||
hostNode: ESTree.Node,
|
||||
): boolean {
|
||||
return NodeGuards.isExpressionStatementNode(hostNode)
|
||||
&& NodeGuards.isSequenceExpressionNode(hostNode.expression)
|
||||
&& hostNode.expression.expressions.some((expressionNode: ESTree.Expression) =>
|
||||
NodeGuards.isCallExpressionNode(expressionNode)
|
||||
&& NodeGuards.isSuperNode(expressionNode.callee)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {TransformationStage} transformationStage
|
||||
* @returns {IVisitor | null}
|
||||
|
||||
+8
-34
@@ -309,40 +309,6 @@ export class NodeGuards {
|
||||
return node.type === NodeType.Property;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Node} node
|
||||
* @param {Node} parentNode
|
||||
* @returns {boolean}
|
||||
*/
|
||||
public static parentNodeIsPropertyNode (node: ESTree.Node, parentNode: ESTree.Node): node is ESTree.Identifier {
|
||||
return NodeGuards.isPropertyNode(parentNode)
|
||||
&& !parentNode.computed
|
||||
&& parentNode.key === node;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Node} node
|
||||
* @param {Node} parentNode
|
||||
* @returns {boolean}
|
||||
*/
|
||||
public static parentNodeIsMemberExpressionNode (node: ESTree.Node, parentNode: ESTree.Node): node is ESTree.Identifier {
|
||||
return (
|
||||
NodeGuards.isMemberExpressionNode(parentNode)
|
||||
&& !parentNode.computed
|
||||
&& parentNode.property === node
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Node} node
|
||||
* @param {Node} parentNode
|
||||
* @returns {boolean}
|
||||
*/
|
||||
public static parentNodeIsMethodDefinitionNode (node: ESTree.Node, parentNode: ESTree.Node): node is ESTree.Identifier {
|
||||
return NodeGuards.isMethodDefinitionNode(parentNode)
|
||||
&& !parentNode.computed;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Node} node
|
||||
* @returns {boolean}
|
||||
@@ -359,6 +325,14 @@ export class NodeGuards {
|
||||
return node.type === NodeType.ReturnStatement;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Node} node
|
||||
* @returns {boolean}
|
||||
*/
|
||||
public static isSequenceExpressionNode (node: ESTree.Node): node is ESTree.SequenceExpression {
|
||||
return node.type === NodeType.SequenceExpression;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Node} node
|
||||
* @returns {boolean}
|
||||
|
||||
Reference in New Issue
Block a user