Merge pull request #172 from javascript-obfuscator/issue-171

Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/…
This commit is contained in:
Timofey Kachalov
2018-01-13 15:42:27 +03:00
committed by GitHub
5 changed files with 60 additions and 4 deletions
+1
View File
@@ -4,6 +4,7 @@ v0.14.0
---
* **Breaking change:** Now CLI obfuscating directory recursively. Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/157
* Fixed runtime errors when `deadCodeInjection` is enabled and `identifierNamesGenerator` is set to `mangled`
* Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/171
* Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/166
* Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/156
* Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/159
+1 -1
View File
File diff suppressed because one or more lines are too long
@@ -58,10 +58,12 @@ export class BlockStatementControlFlowTransformer extends AbstractNodeTransforme
|| NodeGuards.isContinueStatementNode(statement);
const isVariableDeclarationWithLetOrConstKind: boolean = NodeGuards.isVariableDeclarationNode(statement)
&& (statement.kind === 'const' || statement.kind === 'let');
const isClassDeclaration: boolean = NodeGuards.isClassDeclarationNode(statement);
return NodeGuards.isFunctionDeclarationNode(statement)
|| isBreakOrContinueStatement
|| isVariableDeclarationWithLetOrConstKind;
|| isVariableDeclarationWithLetOrConstKind
|| isClassDeclaration;
});
}
@@ -454,7 +454,31 @@ describe('BlockStatementControlFlowTransformer', function () {
});
});
describe('variant #13: `controlFlowFlatteningThreshold` chance', () => {
describe('variant #13: block statement contain class declaration', () => {
const statementRegExp: RegExp = /^\(function *\( *\) *{ * *class *_0x([a-f0-9]){4,6} *{.*?} *}.*class *_0x([a-f0-9]){4,6} *{.*?} *}.*class *_0x([a-f0-9]){4,6} *{.*?} *}/;
let obfuscatedCode: string;
before(() => {
const code: string = readFileAsString(__dirname + '/fixtures/class-declaration.js');
const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
code,
{
...NO_CUSTOM_NODES_PRESET,
controlFlowFlattening: true,
controlFlowFlatteningThreshold: 1
}
);
obfuscatedCode = obfuscationResult.getObfuscatedCode();
});
it('shouldn\'t transform block statement', () => {
assert.match(obfuscatedCode, statementRegExp);
});
});
describe('variant #14: `controlFlowFlatteningThreshold` chance', () => {
const samples: number = 1000;
const delta: number = 0.1;
@@ -499,7 +523,7 @@ describe('BlockStatementControlFlowTransformer', function () {
});
});
describe('variant #14: No `unreachable code after return statement` warning', () => {
describe('variant #15: No `unreachable code after return statement` warning', () => {
const switchCaseRegExp: RegExp = /switch *\(_0x([a-f0-9]){4,6}\[_0x([a-f0-9]){4,6}\+\+\]\) *\{/;
const switchCaseLengthRegExp: RegExp = /case *'[0-5]': *console\['log'\]\(0x[0-6]\);/g;
const returnStatementRegExp: RegExp = /case *'[0-5]': *return; *(case|})/;
@@ -0,0 +1,29 @@
(function(){
class Test1 {
foo () {
var that = this;
console.log(that.foo);
}
}
class Test2 {
bar () {
var that = this;
console.log(that.bar);
}
}
class Test3 {
baz () {
var that = this;
console.log(that.baz);
}
}
console.log(new Test1().foo());
console.log(new Test2().bar());
console.log(new Test3().baz());
})();