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

Skip to content

Commit 7d8d409

Browse files
authored
Merge pull request javascript-obfuscator#523 from javascript-obfuscator/transform-object-keys-return-fix
Fixed object expression keys transformation
2 parents 73ec8e6 + 241c069 commit 7d8d409

File tree

9 files changed

+71
-38
lines changed

9 files changed

+71
-38
lines changed

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.

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": "0.24.0-rc.2",
3+
"version": "0.24.0-rc.3",
44
"description": "JavaScript obfuscator",
55
"keywords": [
66
"obfuscator",

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

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,6 @@ export class ObjectExpressionKeysTransformer extends AbstractNodeTransformer {
188188

189189
// should mark node as prohibited if identifier of node is referenced somewhere inside other nodes
190190
for (const nodeToSearch of nodesToSearch) {
191-
const identifierNamesSetForCurrentNode: string[] = [];
192-
193191
estraverse.traverse(nodeToSearch, {
194192
enter: (node: ESTree.Node): void | estraverse.VisitorOption => {
195193
if (node === objectExpressionNode) {
@@ -201,7 +199,7 @@ export class ObjectExpressionKeysTransformer extends AbstractNodeTransformer {
201199
}
202200

203201
if (!isCurrentNode) {
204-
identifierNamesSetForCurrentNode.push(node.name);
202+
identifierNamesSet.push(node.name);
205203
} else if (identifierNamesSet.includes(node.name)) {
206204
isReferencedIdentifierName = true;
207205

@@ -212,8 +210,6 @@ export class ObjectExpressionKeysTransformer extends AbstractNodeTransformer {
212210

213211
if (isCurrentNode || isReferencedIdentifierName) {
214212
break;
215-
} else {
216-
identifierNamesSet.push(...identifierNamesSetForCurrentNode);
217213
}
218214
}
219215

test/dev/dev.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@ import { NO_ADDITIONAL_NODES_PRESET } from '../../src/options/presets/NoCustomNo
77

88
let obfuscatedCode: string = JavaScriptObfuscator.obfuscate(
99
`
10-
function foo () {
10+
function test() {
1111
var foo;
12-
var bar;
13-
(foo = {foo: 1}), (bar = {bar: foo.foo});
14-
return bar.bar;
12+
return (foo = {props: 1})['state'] = {
13+
expanded: foo.props
14+
},
15+
foo.state.expanded;
1516
}
1617
17-
console.log(foo());
18+
console.log(test());
1819
`,
1920
{
2021
...NO_ADDITIONAL_NODES_PRESET,

test/functional-tests/node-transformers/converting-transformers/object-expression-keys-transformer/ObjectExpressionKeysTransformer.spec.ts

Lines changed: 51 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1523,33 +1523,62 @@ describe('ObjectExpressionKeysTransformer', () => {
15231523
});
15241524

15251525
describe('Variant #6: return statement sequence expression identifier reference', () => {
1526-
const match: string = `` +
1527-
`var ${variableMatch};` +
1528-
`var ${variableMatch};` +
1529-
`var ${variableMatch} *= *{};` +
1530-
`${variableMatch}\\['foo'] *= *0x1;` +
1531-
`return ${variableMatch} *= *${variableMatch}, *` +
1532-
`${variableMatch} *= *{'bar' *: *${variableMatch}\\['foo']}, *` +
1533-
`${variableMatch}\\['bar'];` +
1534-
``;
1535-
const regExp: RegExp = new RegExp(match);
1526+
describe('Variant #1: reference on other sequence expression identifier', () => {
1527+
const match: string = `` +
1528+
`var ${variableMatch};` +
1529+
`var ${variableMatch};` +
1530+
`var ${variableMatch} *= *{};` +
1531+
`${variableMatch}\\['foo'] *= *0x1;` +
1532+
`return ${variableMatch} *= *${variableMatch}, *` +
1533+
`${variableMatch} *= *{'bar' *: *${variableMatch}\\['foo']}, *` +
1534+
`${variableMatch}\\['bar'];` +
1535+
``;
1536+
const regExp: RegExp = new RegExp(match);
15361537

1537-
let obfuscatedCode: string;
1538+
let obfuscatedCode: string;
15381539

1539-
before(() => {
1540-
const code: string = readFileAsString(__dirname + '/fixtures/return-statement-sequence-expression-identifier-reference.js');
1540+
before(() => {
1541+
const code: string = readFileAsString(__dirname + '/fixtures/return-statement-sequence-expression-identifier-reference-1.js');
15411542

1542-
obfuscatedCode = JavaScriptObfuscator.obfuscate(
1543-
code,
1544-
{
1545-
...NO_ADDITIONAL_NODES_PRESET,
1546-
transformObjectKeys: true
1547-
}
1548-
).getObfuscatedCode();
1543+
obfuscatedCode = JavaScriptObfuscator.obfuscate(
1544+
code,
1545+
{
1546+
...NO_ADDITIONAL_NODES_PRESET,
1547+
transformObjectKeys: true
1548+
}
1549+
).getObfuscatedCode();
1550+
});
1551+
1552+
it('shouldn ignore sequence expression object expression if it references same sequence expression identifier', () => {
1553+
assert.match(obfuscatedCode, regExp);
1554+
});
15491555
});
15501556

1551-
it('shouldn ignore sequence expression object expression if it references other sequence expression identifier', () => {
1552-
assert.match(obfuscatedCode, regExp);
1557 F438 +
describe('Variant #2: reference on same sequence expression identifier', () => {
1558+
const match: string = `` +
1559+
`var ${variableMatch};` +
1560+
`return *\\(${variableMatch} *= *{'props' *: *0x1}\\)\\['state'] *= *{'expanded' *: *${variableMatch}\\['props']}, *` +
1561+
`${variableMatch}\\['state']\\['expanded'];` +
1562+
``;
1563+
const regExp: RegExp = new RegExp(match);
1564+
1565+
let obfuscatedCode: string;
1566+
1567+
before(() => {
1568+
const code: string = readFileAsString(__dirname + '/fixtures/return-statement-sequence-expression-identifier-reference-2.js');
1569+
1570+
obfuscatedCode = JavaScriptObfuscator.obfuscate(
1571+
code,
1572+
{
1573+
...NO_ADDITIONAL_NODES_PRESET,
1574+
transformObjectKeys: true
1575+
}
1576+
).getObfuscatedCode();
1577+
});
1578+
1579+
it('shouldn ignore sequence expression object expression if it references same sequence expression identifier', () => {
1580+
assert.match(obfuscatedCode, regExp);
1581+
});
15531582
});
15541583
});
15551584
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
function test() {
2+
var foo;
3+
return (foo = {props: 1})['state'] = {
4+
expanded: foo.props
5+
},
6+
foo.state.expanded;
7+
}

0 commit comments

Comments
 (0)
0