Skip to content

Commit b26692a

Browse files
authored
Merge pull request javascript-obfuscator#938 from javascript-obfuscator/transform-object-keys-this-expression
Fixed invalid behaviour of `transformObjectKeys` option when object values contains `this` references
2 parents 21c6fa8 + 65bc307 commit b26692a

21 files changed

+449
-8
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
Change Log
22

3+
v2.15.2
4+
---
5+
* Fixed invalid behaviour of `transformObjectKeys` option when object values contains `this` references. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/937
6+
37
v2.15.1
48
---
59
* **Hotfix**: `domainDest` => `domainLockRedirectUrl` option rename

dist/index.browser.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/index.cli.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/index.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "javascript-obfuscator",
3-
"version": "2.15.1",
3+
"version": "2.15.2",
44
"description": "JavaScript obfuscator",
55
"keywords": [
66
"obfuscator",

src/enums/node/NodeType.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ export enum NodeType {
4949
TaggedTemplateExpression = 'TaggedTemplateExpression',
5050
TemplateElement = 'TemplateElement',
5151
TemplateLiteral = 'TemplateLiteral',
52+
ThisExpression = 'ThisExpression',
5253
ThrowStatement = 'ThrowStatement',
5354
TryStatement = 'TryStatement',
5455
UnaryExpression = 'UnaryExpression',

src/node-transformers/converting-transformers/ObjectExpressionKeysTransformer.ts

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ import { NodeStatementUtils } from '../../node/NodeStatementUtils';
1919

2020
@injectable()
2121
export class ObjectExpressionKeysTransformer extends AbstractNodeTransformer {
22+
/**
23+
* @type {string}
24+
*/
25+
private static readonly thisIdentifierName: string = 'this';
26+
2227
/**
2328
* @type {ObjectExpressionExtractor[]}
2429
*/
@@ -73,6 +78,18 @@ export class ObjectExpressionKeysTransformer extends AbstractNodeTransformer {
7378
);
7479
}
7580

81+
/**
82+
* @param {Identifier | ThisExpression} node
83+
* @returns {string}
84+
*/
85+
private static getReferencedIdentifierName (node: ESTree.Identifier | ESTree.ThisExpression): string {
86+
if (NodeGuards.isIdentifierNode(node)) {
87+
return node.name;
88+
} else {
89+
return ObjectExpressionKeysTransformer.thisIdentifierName;
90+
}
91+
}
92+
7693
/**
7794
* @param {ObjectExpression} objectExpressionNode
7895
* @param {Node} objectExpressionHostNode
@@ -94,17 +111,21 @@ export class ObjectExpressionKeysTransformer extends AbstractNodeTransformer {
94111
isCurrentNode = true;
95112
}
96113

97-
if (!NodeGuards.isIdentifierNode(node)) {
114+
if (!NodeGuards.isIdentifierNode(node) && !NodeGuards.isThisExpressionNode(node)) {
98115
return;
99116
}
100117

101118
if (!isCurrentNode) {
102-
identifierNamesSet.push(node.name);
119+
identifierNamesSet.push(ObjectExpressionKeysTransformer.getReferencedIdentifierName(node));
103120

104121
return;
105122
}
106123

107-
if (identifierNamesSet.includes(node.name)) {
124+
const hasReferencedIdentifierName: boolean = identifierNamesSet.includes(
125+
ObjectExpressionKeysTransformer.getReferencedIdentifierName(node)
126+
);
127+
128+
if (hasReferencedIdentifierName) {
108129
isReferencedIdentifierName = true;
109130
}
110131
},

src/node/NodeGuards.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,14 @@ export class NodeGuards {
482482
return node.type === NodeType.TemplateLiteral;
483483
}
484484

485+
/**
486+
* @param {Node} node
487+
* @returns {boolean}
488+
*/
489+
public static isThisExpressionNode (node: ESTree.Node): node is ESTree.ThisExpression {
490+
return node.type === NodeType.ThisExpression;
491+
}
492+
485493
/**
486494
* @param {Node} node
487495
* @returns {boolean}

0 commit comments

Comments
 (0)