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