Browse Source

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

Template literal error
Timofey Kachalov 6 years ago
parent
commit
140c4e8bbb

+ 1 - 0
CHANGELOG.md

@@ -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
 ---

File diff suppressed because it is too large
+ 0 - 0
dist/index.browser.js


File diff suppressed because it is too large
+ 0 - 0
dist/index.cli.js


File diff suppressed because it is too large
+ 0 - 0
dist/index.js


+ 3 - 3
src/node-transformers/converting-transformers/ObjectExpressionTransformer.ts

@@ -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;

+ 9 - 2
src/node-transformers/converting-transformers/TemplateLiteralTransformer.ts

@@ -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;
     }
 }

+ 2 - 2
test/functional-tests/node-transformers/converting-transformers/object-expression-transformer/ObjectExpressionTransformer.spec.ts

@@ -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);
                 });
             });

+ 15 - 0
test/functional-tests/node-transformers/converting-transformers/template-literal-transformer/TemplateLiteralTransformer.spec.ts

@@ -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'\);$/);
+        });
+    });
 });

+ 1 - 0
test/functional-tests/node-transformers/converting-transformers/template-literal-transformer/fixtures/template-literal-parentize.js

@@ -0,0 +1 @@
+[].map(() => `foo`);

Some files were not shown because too many files changed in this diff