mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
Fixed invalid behaviour of transformObjectKeys option when object values contains this references
This commit is contained in:
@@ -49,6 +49,7 @@ export enum NodeType {
|
||||
TaggedTemplateExpression = 'TaggedTemplateExpression',
|
||||
TemplateElement = 'TemplateElement',
|
||||
TemplateLiteral = 'TemplateLiteral',
|
||||
ThisExpression = 'ThisExpression',
|
||||
ThrowStatement = 'ThrowStatement',
|
||||
TryStatement = 'TryStatement',
|
||||
UnaryExpression = 'UnaryExpression',
|
||||
|
||||
@@ -19,6 +19,11 @@ import { NodeStatementUtils } from '../../node/NodeStatementUtils';
|
||||
|
||||
@injectable()
|
||||
export class ObjectExpressionKeysTransformer extends AbstractNodeTransformer {
|
||||
/**
|
||||
* @type {string}
|
||||
*/
|
||||
private static readonly thisIdentifierName: string = 'this';
|
||||
|
||||
/**
|
||||
* @type {ObjectExpressionExtractor[]}
|
||||
*/
|
||||
@@ -73,6 +78,18 @@ export class ObjectExpressionKeysTransformer extends AbstractNodeTransformer {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Identifier | ThisExpression} node
|
||||
* @returns {string}
|
||||
*/
|
||||
private static getReferencedIdentifierName (node: ESTree.Identifier | ESTree.ThisExpression): string {
|
||||
if (NodeGuards.isIdentifierNode(node)) {
|
||||
return node.name;
|
||||
} else {
|
||||
return ObjectExpressionKeysTransformer.thisIdentifierName;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {ObjectExpression} objectExpressionNode
|
||||
* @param {Node} objectExpressionHostNode
|
||||
@@ -94,17 +111,21 @@ export class ObjectExpressionKeysTransformer extends AbstractNodeTransformer {
|
||||
isCurrentNode = true;
|
||||
}
|
||||
|
||||
if (!NodeGuards.isIdentifierNode(node)) {
|
||||
if (!NodeGuards.isIdentifierNode(node) && !NodeGuards.isThisExpressionNode(node)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isCurrentNode) {
|
||||
identifierNamesSet.push(node.name);
|
||||
identifierNamesSet.push(ObjectExpressionKeysTransformer.getReferencedIdentifierName(node));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (identifierNamesSet.includes(node.name)) {
|
||||
const hasReferencedIdentifierName: boolean = identifierNamesSet.includes(
|
||||
ObjectExpressionKeysTransformer.getReferencedIdentifierName(node)
|
||||
);
|
||||
|
||||
if (hasReferencedIdentifierName) {
|
||||
isReferencedIdentifierName = true;
|
||||
}
|
||||
},
|
||||
|
||||
@@ -482,6 +482,14 @@ export class NodeGuards {
|
||||
return node.type === NodeType.TemplateLiteral;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Node} node
|
||||
* @returns {boolean}
|
||||
*/
|
||||
public static isThisExpressionNode (node: ESTree.Node): node is ESTree.ThisExpression {
|
||||
return node.type === NodeType.ThisExpression;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Node} node
|
||||
* @returns {boolean}
|
||||
|
||||
Reference in New Issue
Block a user