Quellcode durchsuchen

Added optimisations to `numbersToExpressions` option. Updated tests

sanex3339 vor 4 Jahren
Ursprung
Commit
1beb3cd774

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
dist/index.browser.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
dist/index.cli.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
dist/index.js


+ 12 - 2
src/analyzers/number-numerical-expression-analyzer/NumberNumericalExpressionAnalyzer.ts

@@ -19,6 +19,11 @@ export class NumberNumericalExpressionAnalyzer implements INumberNumericalExpres
      */
     private static readonly additionalParts: number = 3;
 
+    /**
+     * @type {Map<number, number[]>}
+     */
+    private readonly numberFactorsMap: Map<number, number[]> = new Map();
+
     /**
      * @type {IRandomGenerator}
      */
@@ -103,11 +108,16 @@ export class NumberNumericalExpressionAnalyzer implements INumberNumericalExpres
     private mixWithMultiplyParts (number: number): number | number[] {
         const shouldMixWithMultiplyParts: boolean = this.randomGenerator.getMathRandom() > 0.5;
 
-        if (!shouldMixWithMultiplyParts) {
+        if (!shouldMixWithMultiplyParts || number === 0) {
             return number;
         }
 
-        const factors: number[] = NumberUtils.getFactors(number);
+        let factors: number[] | null = this.numberFactorsMap.get(number) ?? null;
+
+        if (!factors) {
+           factors = NumberUtils.getFactors(number);
+           this.numberFactorsMap.set(number, factors);
+        }
 
         if (!factors.length) {
             return number;

+ 2 - 1
src/utils/NumberUtils.ts

@@ -82,12 +82,13 @@ export class NumberUtils {
 
         const factors: number[] = [];
 
+        const root: number = Math.sqrt(number);
         const isEven: boolean = number % 2 === 0;
         const incrementValue: number = isEven ? 1 : 2;
 
         for (
             let currentFactor = 1;
-            Math.pow(currentFactor, 2) <= number;
+            currentFactor <= root;
             currentFactor += incrementValue
         ) {
             if (number % currentFactor !== 0) {

+ 1 - 1
test/dev/dev.ts

@@ -7,7 +7,7 @@ import { NO_ADDITIONAL_NODES_PRESET } from '../../src/options/presets/NoCustomNo
 
     let obfuscatedCode: string = JavaScriptObfuscator.obfuscate(
         `
-            const foo = 100;
+            const foo = 0;
             
             console.log(foo);
         `,

+ 1 - 0
test/functional-tests/javascript-obfuscator/JavaScriptObfuscator.spec.ts

@@ -810,6 +810,7 @@ describe('JavaScriptObfuscator', () => {
                         deadCodeInjection: true,
                         deadCodeInjectionThreshold: 1,
                         disableConsoleOutput: false,
+                        numbersToExpressions: true,
                         simplify: true,
                         renameProperties: true,
                         rotateStringArray: true,

+ 1 - 0
test/runtime-tests/JavaScriptObfuscatorRuntime.spec.ts

@@ -25,6 +25,7 @@ describe('JavaScriptObfuscator runtime eval', function () {
         debugProtection: true,
         disableConsoleOutput: true,
         domainLock: ['obfuscator.io'],
+        numbersToExpressions: true,
         simplify: true,
         renameProperties: true,
         reservedNames: ['generate', 'sha256'],

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.