mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
[Bug] Fix a name collision in String Array Storage
This commit is contained in:
@@ -30,14 +30,16 @@ export abstract class AbstractIdentifierNamesGenerator implements IIdentifierNam
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {number} nameLength
|
||||
* @returns {string}
|
||||
*/
|
||||
public abstract generate (): string;
|
||||
public abstract generate (nameLength?: number): string;
|
||||
|
||||
/**
|
||||
* @param {number} nameLength
|
||||
* @returns {string}
|
||||
*/
|
||||
public abstract generateWithPrefix (): string;
|
||||
public abstract generateWithPrefix (nameLength?: number): string;
|
||||
|
||||
/**
|
||||
* @param {string} name
|
||||
|
||||
@@ -32,18 +32,23 @@ export class HexadecimalIdentifierNamesGenerator extends AbstractIdentifierNames
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {number} nameLength
|
||||
* @returns {string}
|
||||
*/
|
||||
public generate (): string {
|
||||
public generate (nameLength?: number): string {
|
||||
const rangeMinInteger: number = 10000;
|
||||
const rangeMaxInteger: number = 99_999_999;
|
||||
const randomInteger: number = this.randomGenerator.getRandomInteger(rangeMinInteger, rangeMaxInteger);
|
||||
const hexadecimalNumber: string = NumberUtils.toHex(randomInteger);
|
||||
const baseIdentifierName: string = hexadecimalNumber.substr(0, HexadecimalIdentifierNamesGenerator.baseIdentifierNameLength);
|
||||
const prefixLength: number = Utils.hexadecimalPrefix.length + 1;
|
||||
const baseNameLength: number = nameLength
|
||||
? nameLength - prefixLength
|
||||
: HexadecimalIdentifierNamesGenerator.baseIdentifierNameLength;
|
||||
const baseIdentifierName: string = hexadecimalNumber.substr(0, baseNameLength);
|
||||
const identifierName: string = `_${Utils.hexadecimalPrefix}${baseIdentifierName}`;
|
||||
|
||||
if (this.randomVariableNameSet.has(identifierName)) {
|
||||
return this.generate();
|
||||
return this.generate(nameLength);
|
||||
}
|
||||
|
||||
this.randomVariableNameSet.add(identifierName);
|
||||
@@ -52,10 +57,11 @@ export class HexadecimalIdentifierNamesGenerator extends AbstractIdentifierNames
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {number} nameLength
|
||||
* @returns {string}
|
||||
*/
|
||||
public generateWithPrefix (): string {
|
||||
const identifierName: string = this.generate();
|
||||
public generateWithPrefix (nameLength?: number): string {
|
||||
const identifierName: string = this.generate(nameLength);
|
||||
|
||||
return `${this.options.identifiersPrefix}${identifierName}`.replace('__', '_');
|
||||
}
|
||||
|
||||
@@ -46,9 +46,11 @@ export class MangledIdentifierNamesGenerator extends AbstractIdentifierNamesGene
|
||||
}
|
||||
|
||||
/**
|
||||
* We can only ignore limited nameLength, it has no sense here
|
||||
* @param {number} nameLength
|
||||
* @returns {string}
|
||||
*/
|
||||
public generate (): string {
|
||||
public generate (nameLength?: number): string {
|
||||
const identifierName: string = this.generateNewMangledName(this.previousMangledName);
|
||||
|
||||
this.previousMangledName = identifierName;
|
||||
@@ -57,13 +59,14 @@ export class MangledIdentifierNamesGenerator extends AbstractIdentifierNamesGene
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {number} nameLength
|
||||
* @returns {string}
|
||||
*/
|
||||
public generateWithPrefix (): string {
|
||||
public generateWithPrefix (nameLength?: number): string {
|
||||
const prefix: string = this.options.identifiersPrefix ?
|
||||
`${this.options.identifiersPrefix}_`
|
||||
: '';
|
||||
const identifierName: string = this.generate();
|
||||
const identifierName: string = this.generate(nameLength);
|
||||
|
||||
return `${prefix}${identifierName}`;
|
||||
}
|
||||
|
||||
+4
-2
@@ -1,13 +1,15 @@
|
||||
export interface IIdentifierNamesGenerator {
|
||||
/**
|
||||
* @param {number} nameLength
|
||||
* @returns {string}
|
||||
*/
|
||||
generate (): string;
|
||||
generate (nameLength?: number): string;
|
||||
|
||||
/**
|
||||
* @param {number} nameLength
|
||||
* @returns {string}
|
||||
*/
|
||||
generateWithPrefix (): string;
|
||||
generateWithPrefix (nameLength?: number): string;
|
||||
|
||||
/**
|
||||
* @param {string} identifierName
|
||||
|
||||
@@ -51,11 +51,9 @@ export class StringArrayStorage extends ArrayStorage <string> {
|
||||
super.initialize();
|
||||
|
||||
const baseStringArrayName: string = this.identifierNamesGenerator
|
||||
.generate()
|
||||
.slice(0, StringArrayStorage.stringArrayNameLength);
|
||||
.generate(StringArrayStorage.stringArrayNameLength);
|
||||
const baseStringArrayCallsWrapperName: string = this.identifierNamesGenerator
|
||||
.generate()
|
||||
.slice(0, StringArrayStorage.stringArrayNameLength);
|
||||
.generate(StringArrayStorage.stringArrayNameLength);
|
||||
const stringArrayName: string = `${this.options.identifiersPrefix}${baseStringArrayName}`;
|
||||
const stringArrayCallsWrapperName: string = `${this.options.identifiersPrefix}${baseStringArrayCallsWrapperName}`;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user