8000 Merge pull request #479 from javascript-obfuscator/transform-object-k… · sec-js/javascript-obfuscator@9927fdc · GitHub
[go: up one dir, main page]

Skip to content

Commit 9927fdc

Browse files
authored
Merge pull request javascript-obfuscator#479 from javascript-obfuscator/transform-object-keys-no-block-statement
More cases with improved `objectExpressionKeys` support
2 parents 5b27365 + 5e9e8d8 commit 9927fdc

21 files changed

+500
-46
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ v0.21.0
44
---
55
* Improved `transformObjectKeys` transformation to cover more cases
66
* Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/406
7+
* Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/387
78

89
v0.20.4
910
---

dist/index.browser.js

Lines changed: 3 additions & 3 deletions
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.

src/enums/node/NodeType.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ export enum NodeType {
1414
ContinueStatement = 'ContinueStatement',
1515
ExportNamedDeclaration = 'ExportNamedDeclaration',
1616
ExpressionStatement = 'ExpressionStatement',
17+
ForStatement = 'ForStatement',
18+
ForInStatement = 'ForInStatement',
19+
ForOfStatement = 'ForOfStatement',
1720
FunctionDeclaration = 'FunctionDeclaration',
1821
FunctionExpression = 'FunctionExpression',
1922
Identifier = 'Identifier',

src/node-transformers/converting-transformers/properties-extractors/AbstractPropertiesExtractor.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,6 @@ export abstract class AbstractPropertiesExtractor implements IPropertiesExtracto
7070
return null;
7171
}
7272

73-
/**
74-
* @param {Node} node
75-
* @returns {propertyValueNode is Pattern}
76-
*/
77-
protected static isProhibitedHostParent (node: ESTree.Node): node is ESTree.Pattern {
78-
return NodeGuards.isMemberExpressionNode(node);
79-
}
80-
8173
/**
8274
* @param {Node} node
8375
* @returns {propertyValueNode is Pattern}

src/node-transformers/converting-transformers/properties-extractors/AssignmentExpressionPropertiesExtractor.ts

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { IOptions } from '../../../interfaces/options/IOptions';
77
import { IRandomGenerator } from '../../../interfaces/utils/IRandomGenerator';
88

99
import { AbstractPropertiesExtractor } from './AbstractPropertiesExtractor';
10+
import { NodeGuards } from '../../../node/NodeGuards';
1011

1112
@injectable()
1213
export class AssignmentExpressionPropertiesExtractor extends AbstractPropertiesExtractor {
@@ -21,6 +22,35 @@ export class AssignmentExpressionPropertiesExtractor extends AbstractPropertiesE
2122
super(randomGenerator, options);
2223
}
2324

25+
/**
26+
* @param {Node} node
27+
* @returns {propertyValueNode is Pattern}
28+
*/
29+
private static isProhibitedHostParent (node: ESTree.Node): node is ESTree.Pattern {
30+
if (NodeGuards.isMemberExpressionNode(node)) {
31+
return true;
32+
}
33+
34+
if (AssignmentExpressionPropertiesExtractor.isProhibitedStatementNode(node)) {
35+
return true;
36+
}
37+
38+
// statements without block statement
39+
return NodeGuards.isExpressionStatementNode(node)
40+
&& !!node.parentNode
41+
&& AssignmentExpressionPropertiesExtractor.isProhibitedStatementNode(node.parentNode);
42+
}
43+
44+
/**
45+
* @param {Node} node
46+
* @returns {boolean}
47+
*/
48+
private static isProhibitedStatementNode (node: ESTree.Node): boolean {
49+
return NodeGuards.isIfStatementNode(node)
50+
|| NodeGuards.isForStatementTypeNode(node)
51+
|| NodeGuards.isWhileStatementNode(node);
52+
}
53+
2454
/**
2555
* @param {ObjectExpression} objectExpressionNode
2656
* @param {AssignmentExpression} hostNode
@@ -38,8 +68,8 @@ export class AssignmentExpressionPropertiesExtractor extends AbstractPropertiesE
3868
return objectExpressionNode;
3969
}
4070

41-
// left node shouldn't be as Pattern node
42-
if (hostParentNode && AbstractPropertiesExtractor.isProhibitedHostParent(hostParentNode)) {
71+
// left node shouldn't be as prohibited node
72+
if (hostParentNode && AssignmentExpressionPropertiesExtractor.isProhibitedHostParent(hostParentNode)) {
4373
return objectExpressionNode;
4474
}
4575

src/node/NodeGuards.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,42 @@ export class NodeGuards {
124124
&& !('directive' in node);
125125
}
126126

127+
/**
128+
* @param {Node} node
129+
* @returns {boolean}
130+
*/
131+
public static isForStatementTypeNode (
132+
node: ESTree.Node
133+
): node is ESTree.ForStatement | ESTree.ForInStatement | ESTree.ForOfStatement {
134+
return NodeGuards.isForStatementNode(node)
135+
|| NodeGuards.isForInStatementNode(node)
136+
|| NodeGuards.isForOfStatementNode(node);
137+
}
138+
139+
/**
140+
* @param {Node} node
141+
* @returns {boolean}
142+
*/
143+
public static isForStatementNode (node: ESTree.Node): node is ESTree.ForStatement {
144+
return node.type === NodeType.ForStatement;
145+
}
146+
147+
/**
148+
* @param {Node} node
149+
* @returns {boolean}
150+
*/
151+
public static isForInStatementNode (node: ESTree.Node): node is ESTree.ForInStatement {
152+
return node.type === NodeType.ForInStatement;
153+
}
154+
155+
/**
156+
* @param {Node} node
157+
* @returns {boolean}
158+
*/
159+
public static isForOfStatementNode (node: ESTree.Node): node is ESTree.ForOfStatement {
160+
return node.type === NodeType.ForOfStatement;
161+
}
162+
127163
/**
128164
* @param {Node} node
129165
* @returns {boolean}
@@ -160,6 +196,14 @@ export class NodeGuards {
160196
return node.type === NodeType.Identifier;
161197
}
162198

199+
/**
200+
* @param {Node} node
201+
* @returns {boolean}
202+
*/
203+
public static isIfStatementNode (node: ESTree.Node): node is ESTree.IfStatement {
204+
return node.type === NodeType.IfStatement;
205+
}
206+
163207
/**
164208
* @param {Node} node
165209
* @returns {boolean}

test/dev/dev.ts

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,14 @@ import { NO_ADDITIONAL_NODES_PRESET } from '../../src/options/presets/NoCustomNo
88
let obfuscatedCode: string = JavaScriptObfuscator.obfuscate(
99
`
1010
function foo () {
11-
function foo () {
12-
return {
13-
bar: {
14-
foo: 1
15-
}
16-
};
17-
}
11+
var bar;
12+
if (false)
13+
bar = {baz: 1};
1814
}
1915
`,
2016
{
2117
...NO_ADDITIONAL_NODES_PRESET,
22-
transformObjectKeys: true,
23-
controlFlowFlattening: true,
24-
controlFlowFlatteningThreshold: 1
18+
transformObjectKeys: true
2519
}
2620
).getObfuscatedCode();
2721

0 commit comments

Comments
 (0)
0