179456c69Sopenharmony_ci#!/usr/bin/env python 279456c69Sopenharmony_ci# -*- coding: utf-8 -*- 379456c69Sopenharmony_ci# Copyright (c) 2023 Huawei Device Co., Ltd. 479456c69Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 579456c69Sopenharmony_ci# you may not use this file except in compliance with the License. 679456c69Sopenharmony_ci# You may obtain a copy of the License at 779456c69Sopenharmony_ci# 879456c69Sopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 979456c69Sopenharmony_ci# 1079456c69Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software 1179456c69Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 1279456c69Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1379456c69Sopenharmony_ci# See the License for the specific language governing permissions and 1479456c69Sopenharmony_ci# limitations under the License. 1579456c69Sopenharmony_ci 1679456c69Sopenharmony_ciimport tarfile 1779456c69Sopenharmony_ciimport argparse 1879456c69Sopenharmony_ciimport os 1979456c69Sopenharmony_ciimport subprocess 2079456c69Sopenharmony_ciimport sys 2179456c69Sopenharmony_ciimport shutil 2279456c69Sopenharmony_ci 2379456c69Sopenharmony_ci 2479456c69Sopenharmony_cidef untar_file(tar_file_path, extract_path): 2579456c69Sopenharmony_ci try: 2679456c69Sopenharmony_ci tar_cmd = ['tar', '-xf', tar_file_path, '-C', extract_path] 2779456c69Sopenharmony_ci subprocess.run(tar_cmd, check=True) 2879456c69Sopenharmony_ci except Exception as e: 2979456c69Sopenharmony_ci print("tar error!") 3079456c69Sopenharmony_ci return 3179456c69Sopenharmony_ci 3279456c69Sopenharmony_ci 3379456c69Sopenharmony_cidef move_file(src_path, dst_path): 3479456c69Sopenharmony_ci files = [ 3579456c69Sopenharmony_ci "backport-CVE-2022-33068.patch", 3679456c69Sopenharmony_ci "backport-0001-CVE-2023-25193.patch", 3779456c69Sopenharmony_ci "backport-0002-CVE-2023-25193.patch", 3879456c69Sopenharmony_ci "huawei_harfbuzz.patch" 3979456c69Sopenharmony_ci ] 4079456c69Sopenharmony_ci for file in files: 4179456c69Sopenharmony_ci src_file = os.path.join(src_path, file) 4279456c69Sopenharmony_ci dst_file = os.path.join(dst_path, file) 4379456c69Sopenharmony_ci shutil.copy(src_file, dst_file) 4479456c69Sopenharmony_ci 4579456c69Sopenharmony_ci 4679456c69Sopenharmony_cidef apply_patch(patch_file, target_dir): 4779456c69Sopenharmony_ci try: 4879456c69Sopenharmony_ci if not os.path.exists(target_dir): 4979456c69Sopenharmony_ci return 5079456c69Sopenharmony_ci patch_cmd = ['patch', '-p1', "--fuzz=0", "--no-backup-if-mismatch", '-i', patch_file, '-d', target_dir] 5179456c69Sopenharmony_ci subprocess.run(patch_cmd, check=True) 5279456c69Sopenharmony_ci except Exception as e: 5379456c69Sopenharmony_ci print("apply_patch error!") 5479456c69Sopenharmony_ci return 5579456c69Sopenharmony_ci 5679456c69Sopenharmony_ci 5779456c69Sopenharmony_cidef do_patch(target_dir): 5879456c69Sopenharmony_ci patch_file = [ 5979456c69Sopenharmony_ci "backport-CVE-2022-33068.patch", 6079456c69Sopenharmony_ci "backport-0001-CVE-2023-25193.patch", 6179456c69Sopenharmony_ci "backport-0002-CVE-2023-25193.patch", 6279456c69Sopenharmony_ci "huawei_harfbuzz.patch" 6379456c69Sopenharmony_ci ] 6479456c69Sopenharmony_ci 6579456c69Sopenharmony_ci for patch in patch_file: 6679456c69Sopenharmony_ci apply_patch(patch, target_dir) 6779456c69Sopenharmony_ci 6879456c69Sopenharmony_ci 6979456c69Sopenharmony_cidef main(): 7079456c69Sopenharmony_ci harfbuzz_path = argparse.ArgumentParser() 7179456c69Sopenharmony_ci harfbuzz_path.add_argument('--gen-dir', help='generate path of log', required=True) 7279456c69Sopenharmony_ci harfbuzz_path.add_argument('--source-dir', help='generate path of log', required=True) 7379456c69Sopenharmony_ci args = harfbuzz_path.parse_args() 7479456c69Sopenharmony_ci tar_file_path = os.path.join(args.source_dir, "harfbuzz-2.8.2.tar.xz") 7579456c69Sopenharmony_ci target_dir = os.path.join(args.gen_dir, "harfbuzz-2.8.2") 7679456c69Sopenharmony_ci 7779456c69Sopenharmony_ci untar_file(tar_file_path, args.gen_dir) 7879456c69Sopenharmony_ci move_file(args.source_dir, target_dir) 7979456c69Sopenharmony_ci do_patch(target_dir) 8079456c69Sopenharmony_ci return 0 8179456c69Sopenharmony_ci 8279456c69Sopenharmony_ciif __name__ == '__main__': 8379456c69Sopenharmony_ci sys.exit(main()) 84