Merge pull request #291 from javascript-obfuscator/template-literal-error

Template literal error
This commit is contained in:
Timofey Kachalov
2018-07-12 02:12:08 +03:00
committed by GitHub
9 changed files with 35 additions and 11 deletions
+1
View File
@@ -3,6 +3,7 @@ Change Log
v0.18.0
---
* Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/289
* Fixed https://github.com/javascript-obfuscator/javascript-obfuscator/issues/288
v0.17.0
---
+2 -2
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
@@ -88,7 +88,7 @@ export class ObjectExpressionTransformer extends AbstractNodeTransformer {
/**
* @param {Property} property
*/
private transformComputedProperty(property: ESTree.Property): void {
private transformComputedProperty (property: ESTree.Property): void {
if (!NodeGuards.isLiteralNode(property.key) || !(typeof property.key.value === 'string')) {
return;
}
@@ -99,7 +99,7 @@ export class ObjectExpressionTransformer extends AbstractNodeTransformer {
/**
* @param {Property} property
*/
private transformBaseProperty(property: ESTree.Property): void {
private transformBaseProperty (property: ESTree.Property): void {
if (property.shorthand) {
property.shorthand = false;
}
@@ -115,7 +115,7 @@ export class ObjectExpressionTransformer extends AbstractNodeTransformer {
* @param {string} inputValue
* @returns {string}
*/
private getPropertyKeyValue(inputValue: string): string {
private getPropertyKeyValue (inputValue: string): string {
return this.options.unicodeEscapeSequence
? this.escapeSequenceEncoder.encode(inputValue, true)
: inputValue;
@@ -12,6 +12,7 @@ import { TransformationStage } from '../../enums/node-transformers/Transformatio
import { AbstractNodeTransformer } from '../AbstractNodeTransformer';
import { NodeFactory } from '../../node/NodeFactory';
import { NodeGuards } from '../../node/NodeGuards';
import { NodeUtils } from '../../node/NodeUtils';
/**
* Transform ES2015 template literals to ES5
@@ -102,6 +103,8 @@ export class TemplateLiteralTransformer extends AbstractNodeTransformer {
nodes.unshift(NodeFactory.literalNode(''));
}
let transformedNode: ESTree.Node;
if (nodes.length > 1) {
let root: ESTree.BinaryExpression = NodeFactory.binaryExpressionNode(
'+',
@@ -113,9 +116,13 @@ export class TemplateLiteralTransformer extends AbstractNodeTransformer {
root = NodeFactory.binaryExpressionNode('+', root, node);
});
return root;
transformedNode = root;
} else {
transformedNode = nodes[0];
}
return nodes[0];
NodeUtils.parentizeAst(transformedNode);
return transformedNode;
}
}
@@ -121,7 +121,7 @@ describe('ObjectExpressionTransformer', () => {
obfuscatedCode = obfuscationResult.getObfuscatedCode();
});
it('should ignore computed property identifier', () => {
it('should ignore computed property literal value', () => {
assert.match(obfuscatedCode, regExp);
});
});
@@ -144,7 +144,7 @@ describe('ObjectExpressionTransformer', () => {
obfuscatedCode = obfuscationResult.getObfuscatedCode();
});
it('should ignore computed property identifier', () => {
it('should encode computed property literal value', () => {
assert.match(obfuscatedCode, regExp);
});
});
@@ -156,4 +156,19 @@ describe('TemplateLiteralTransformer', () => {
);
});
});
describe('Variant #7: template literal parentize', () => {
it('should parentize transformed template literal node', () => {
const code: string = readFileAsString(__dirname + '/fixtures/template-literal-parentize.js');
const obfuscationResult: IObfuscationResult = JavaScriptObfuscator.obfuscate(
code,
{
...NO_ADDITIONAL_NODES_PRESET,
unicodeEscapeSequence: false
}
);
assert.match(obfuscationResult.getObfuscatedCode(), /^\[]\['map']\(\(\) *=> *'foo'\);$/);
});
});
});