mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
* Fixed broken identifierNamesGenerator: 'mangled-shuffled' after 2.2.0
This commit is contained in:
@@ -59,86 +59,6 @@ export class MangledIdentifierNamesGenerator extends AbstractIdentifierNamesGene
|
||||
super(randomGenerator, options);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} nextName
|
||||
* @param {string} prevName
|
||||
* @returns {boolean}
|
||||
*/
|
||||
// eslint-disable-next-line complexity
|
||||
public static isIncrementedMangledName (nextName: string, prevName: string): boolean {
|
||||
if (nextName === prevName) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const nextNameLength: number = nextName.length;
|
||||
const prevNameLength: number = prevName.length;
|
||||
|
||||
if (nextNameLength !== prevNameLength) {
|
||||
return nextNameLength > prevNameLength;
|
||||
}
|
||||
|
||||
let isIncrementedPrevCharacter: boolean = false;
|
||||
|
||||
for (let i: number = 0; i < nextNameLength; i++) {
|
||||
const nextNameCharacter: string = nextName[i];
|
||||
const prevNameCharacter: string = prevName[i];
|
||||
|
||||
if (nextNameCharacter === prevNameCharacter) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const isDigitNextNameCharacter: boolean = MangledIdentifierNamesGenerator.isDigitCharacter(nextNameCharacter);
|
||||
const isDigitPrevNameCharacter: boolean = MangledIdentifierNamesGenerator.isDigitCharacter(prevNameCharacter);
|
||||
|
||||
if (
|
||||
isIncrementedPrevCharacter
|
||||
&& isDigitNextNameCharacter
|
||||
&& !isDigitPrevNameCharacter
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
|
||||
const isUpperCaseNextNameCharacter: boolean = MangledIdentifierNamesGenerator.isUpperCaseCharacter(nextNameCharacter);
|
||||
const isUpperCasePrevNameCharacter: boolean = MangledIdentifierNamesGenerator.isUpperCaseCharacter(prevNameCharacter);
|
||||
|
||||
if (
|
||||
isUpperCaseNextNameCharacter
|
||||
&& !isUpperCasePrevNameCharacter
|
||||
) {
|
||||
return true;
|
||||
} else if (
|
||||
!isUpperCaseNextNameCharacter
|
||||
&& isUpperCasePrevNameCharacter
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
isIncrementedPrevCharacter = nextNameCharacter > prevNameCharacter;
|
||||
|
||||
if (nextNameCharacter < prevNameCharacter) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return nextName > prevName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} character
|
||||
* @returns {boolean}
|
||||
*/
|
||||
private static isUpperCaseCharacter (string: string): boolean {
|
||||
return /^[A-Z]*$/.test(string);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} character
|
||||
* @returns {boolean}
|
||||
*/
|
||||
private static isDigitCharacter (string: string): boolean {
|
||||
return /^[0-9]*$/.test(string);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates next name based on a global previous mangled name
|
||||
* We can ignore nameLength parameter here, it hasn't sense with this generator
|
||||
@@ -204,6 +124,43 @@ export class MangledIdentifierNamesGenerator extends AbstractIdentifierNamesGene
|
||||
return identifierName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} nextName
|
||||
* @param {string} prevName
|
||||
* @returns {boolean}
|
||||
*/
|
||||
// eslint-disable-next-line complexity
|
||||
public isIncrementedMangledName (nextName: string, prevName: string): boolean {
|
||||
if (nextName === prevName) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const nextNameLength: number = nextName.length;
|
||||
const prevNameLength: number = prevName.length;
|
||||
|
||||
if (nextNameLength !== prevNameLength) {
|
||||
return nextNameLength > prevNameLength;
|
||||
}
|
||||
|
||||
const nameSequence: string[] = this.getNameSequence();
|
||||
|
||||
for (let i: number = 0; i < nextNameLength; i++) {
|
||||
const nextNameCharacter: string = nextName[i];
|
||||
const prevNameCharacter: string = prevName[i];
|
||||
|
||||
if (nextNameCharacter === prevNameCharacter) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const indexOfNextNameCharacter: number = nameSequence.indexOf(nextNameCharacter);
|
||||
const indexOfPrevNameCharacter: number = nameSequence.indexOf(prevNameCharacter);
|
||||
|
||||
return indexOfNextNameCharacter > indexOfPrevNameCharacter;
|
||||
}
|
||||
|
||||
throw new Error('Something goes wrong during comparison of mangled names');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} mangledName
|
||||
* @returns {boolean}
|
||||
@@ -224,7 +181,7 @@ export class MangledIdentifierNamesGenerator extends AbstractIdentifierNamesGene
|
||||
* @param {string} name
|
||||
*/
|
||||
protected updatePreviousMangledName (name: string): void {
|
||||
if (!MangledIdentifierNamesGenerator.isIncrementedMangledName(name, this.previousMangledName)) {
|
||||
if (!this.isIncrementedMangledName(name, this.previousMangledName)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user