From 92a65b1c7b9c69bbd2dfe313e001c993c26fa12e Mon Sep 17 00:00:00 2001 From: zengyuan Date: Fri, 24 May 2024 10:19:59 +0800 Subject: [PATCH] Modify the initialization position of the configuration data in RenameFileNameTransformer Issue: https://gitee.com/openharmony/arkcompiler_ets_frontend/issues/I9RNJI Signed-off-by: zengyuan Change-Id: I6721b81f324663d158cc9ab8153401efe141cc61 --- .../rename/RenameFileNameTransformer.ts | 38 +++++++++---------- arkguard/src/utils/FileUtils.ts | 2 +- .../RenameFileNameTransformer.spec.ts | 37 ++++++++++++++++++ .../obfuscate_filename_config.json | 27 +++++++++++++ 4 files changed, 84 insertions(+), 20 deletions(-) create mode 100644 arkguard/test/ut/transformer/RenameFileNameTransformer.spec.ts create mode 100644 arkguard/test/ut/transformer/obfuscate_filename_config.json diff --git a/arkguard/src/transformers/rename/RenameFileNameTransformer.ts b/arkguard/src/transformers/rename/RenameFileNameTransformer.ts index fbac8f3aea..1c2081a97c 100644 --- a/arkguard/src/transformers/rename/RenameFileNameTransformer.ts +++ b/arkguard/src/transformers/rename/RenameFileNameTransformer.ts @@ -61,7 +61,7 @@ import { needToBeReserved } from '../../utils/TransformUtil'; namespace secharmony { // global mangled file name table used by all files in a project - export let globalFileNameMangledTable: Map = undefined; + export let globalFileNameMangledTable: Map = new Map(); // used for file name cache export let historyFileNameMangledTable: Map = undefined; @@ -84,6 +84,24 @@ namespace secharmony { return null; } + let nameGeneratorOption: NameGeneratorOptions = {}; + if (profile.mNameGeneratorType === NameGeneratorType.HEX) { + nameGeneratorOption.hexWithPrefixSuffix = true; + } + + generator = getNameGenerator(profile.mNameGeneratorType, nameGeneratorOption); + let configReservedFileName: string[] = profile?.mReservedFileNames ?? []; + const tempReservedName: string[] = ['.', '..', '']; + configReservedFileName.forEach(directory => { + tempReservedName.push(directory); + const pathOrExtension: PathAndExtension = FileUtils.getFileSuffix(directory); + if (pathOrExtension.ext) { + tempReservedName.push(pathOrExtension.ext); + tempReservedName.push(pathOrExtension.path); + } + }); + reservedFileNames = new Set(tempReservedName); + universalReservedFileNames = profile?.mUniversalReservedFileNames ?? []; return renameFileNameFactory; function renameFileNameFactory(context: TransformationContext): Transformer { @@ -92,24 +110,6 @@ namespace secharmony { localPackageSet = projectInfo.localPackageSet; useNormalized = projectInfo.useNormalized; } - let options: NameGeneratorOptions = {}; - if (profile.mNameGeneratorType === NameGeneratorType.HEX) { - options.hexWithPrefixSuffix = true; - } - - generator = getNameGenerator(profile.mNameGeneratorType, options); - let configReservedFileName: string[] = profile?.mReservedFileNames ?? []; - const tempReservedName: string[] = ['.', '..', '']; - configReservedFileName.forEach(directory => { - tempReservedName.push(directory); - const pathOrExtension: PathAndExtension = FileUtils.getFileSuffix(directory); - if (pathOrExtension.ext) { - tempReservedName.push(pathOrExtension.ext); - tempReservedName.push(pathOrExtension.path); - } - }); - reservedFileNames = new Set(tempReservedName); - universalReservedFileNames = profile?.mUniversalReservedFileNames ?? []; return renameFileNameTransformer; diff --git a/arkguard/src/utils/FileUtils.ts b/arkguard/src/utils/FileUtils.ts index ebd7487a02..a03df77b01 100644 --- a/arkguard/src/utils/FileUtils.ts +++ b/arkguard/src/utils/FileUtils.ts @@ -138,7 +138,7 @@ export class FileUtils { const directories = this.splitFilePath(filePath); directories.forEach(reservedStr => { reservedArray.push(reservedStr); - }) + }); } static relativePathBegins: string[] = ['./', '../', '.\\', '..\\']; diff --git a/arkguard/test/ut/transformer/RenameFileNameTransformer.spec.ts b/arkguard/test/ut/transformer/RenameFileNameTransformer.spec.ts new file mode 100644 index 0000000000..f6318b90fe --- /dev/null +++ b/arkguard/test/ut/transformer/RenameFileNameTransformer.spec.ts @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { describe, it } from 'mocha'; +import { TransformerManager } from '../../../src/transformers/TransformerManager'; +import { assert } from 'chai'; +import { FileUtils } from '../../../src/utils/FileUtils'; +import path from 'path'; +import { IOptions } from '../../../src/configs/IOptions'; +import { TransformerFactory, Node } from 'typescript'; +import { getMangleCompletePath } from '../../../src/transformers/rename/RenameFileNameTransformer'; + +describe('Tester Cases for .', function () { + it('Tester: Test initialization of config in api createRenameFileNameFactory', function () { + let mCustomProfiles: IOptions | undefined = FileUtils.readFileAsJson(path.join(__dirname, "obfuscate_filename_config.json")); + assert.strictEqual(mCustomProfiles !== undefined, true); + let mTransformers: TransformerFactory[] = []; + if (mCustomProfiles) { + mTransformers = new TransformerManager(mCustomProfiles).getTransformers(); + } + const originalPath = 'D:/workplace/src/ets/entryability/EntryAbility.ts' + const mangledPath = getMangleCompletePath(originalPath); + assert.strictEqual(mangledPath === 'D:/workplace/src/ets/a/b.ts', true); + }); +}); diff --git a/arkguard/test/ut/transformer/obfuscate_filename_config.json b/arkguard/test/ut/transformer/obfuscate_filename_config.json new file mode 100644 index 0000000000..549ba202e7 --- /dev/null +++ b/arkguard/test/ut/transformer/obfuscate_filename_config.json @@ -0,0 +1,27 @@ +{ + "mCompact": false, + "mRemoveComments": false, + "mOutputDir": "", + "mDisableHilog": false, + "mDisableConsole": false, + "mSimplify": false, + "mNameObfuscation": { + "mEnable": true, + "mNameGeneratorType": 1, + "mDictionaryList": [], + "mReservedNames": [], + "mRenameProperties": false, + "mReservedProperties": [], + "mKeepStringProperty": true, + "mReservedToplevelNames": [] + }, + "mEnableSourceMap": false, + "mEnableNameCache": false, + "mTopLevel":true, + "mRenameFileName": { + "mEnable": true, + "mNameGeneratorType": 1, + "mReservedFileNames": ["D:", "workplace", "src", "ets"], + "mOhmUrlUseNormalized": false + } +} \ No newline at end of file -- Gitee