Selasa, 05 Januari 2021

Script Python untuk Memperbaiki Patch EDK2 dari ThunderBird

Kalo kamu sering download patch EDK2 dari mailing list pake ThunderBird, kadang bakal dapet masalah double line feed yang nyebelin banget. Daripada ribet benerin manual, bisa pake Python script ini:

import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('files', type=argparse.FileType('rb+'), nargs='+')
    args = parser.parse_args()

    for file in args.files:
        buffer = bytearray(file.read())

        # Hapus line kosong di awal
        while (buffer[0] == 0x0d) or (buffer[0] == 0x0a):
            del buffer[0]

        # Gabung Subject:, CC:, dll yang kepotong
        for i in range(buffer.find(b'\x0d\x0a---')):
            if (buffer[i] == 0x3a) and (buffer[i+1] == 0x0d) and (buffer[i+2] == 0x0a):
                del buffer[i+1]
                buffer[i+1] = 0x20

        # Hapus double CRLF di chunk
        i = buffer.find(b'\x0d\x0a@@')
        while i < len(buffer) - 3:
            if (buffer[i] == 0x0d) and (buffer[i+1] == 0x0a) and (buffer[i+2] == 0x0d) and (buffer[i+3] == 0x0a):
                del buffer[i]
                del buffer[i]
            i = i + 1

        file.seek(0)
        file.write(buffer)
        file.truncate()

Script ini bakal otomatis hapus CRLF ganda, gabung header yang kepotong, dan bikin patch jadi rapi lagi. Tinggal jalanin aja di terminal.