LHA или LZH — это бесплатная утилита сжатия и связанный с ней формат файла. Она была создана в 1988 году Харуясу Ёсидзаки (吉崎栄泰, Ёсидзаки Харуясу ) , врачом, и изначально называлась LHarc . Полностью переписанная версия LHarc, предварительно названная LHx , в конечном итоге была выпущена как LH . Затем она была переименована в LHA , чтобы избежать конфликта с новой тогда командой MS-DOS 5.0 LH («load high»). Оригинальная LHA и ее порт для Windows , LHA32, больше не находятся в разработке, поскольку Ёсидзаки занят на работе. [1]
Хотя на западе он больше не используется, LHA оставался популярным в Японии до 2000-х годов. [2] Он использовался id Software для сжатия установочных файлов для своих ранних игр, включая Doom и Quake . Поскольку некоторые версии LHA распространялись с исходным кодом по разрешительной лицензии , LHA был портирован на многие операционные системы и до сих пор является основным форматом архивации, используемым на компьютере Amiga , хотя он конкурировал с LZX в середине 1990-х годов. Это произошло из-за Aminet , крупнейшего в мире архива программного обеспечения и файлов, связанных с Amiga, который стандартизировал реализацию LHA Стефана Боберга для Amiga.
Компания Microsoft выпустила надстройку Microsoft Compressed (LZH) Folder Add-on, разработанную для японской версии Windows XP . [3] Японская версия Windows 7 поставляется со встроенной надстройкой папки LZH. [4] Пользователи неяпонских версий Windows 7 Enterprise и Ultimate также могут установить надстройку папки LZH, установив дополнительный японский языковой пакет из Центра обновления Windows .
В архиве LZH метод сжатия хранится в виде пятибайтовой текстовой строки, например -lz1- . Это байты с третьего по седьмой файла.
LHarc сжимает файлы с использованием алгоритма из более раннего продукта LZHUF Йошизаки, который был модифицирован на основе LZARI, разработанного Харухико Окумурой (奥村晴彦, Окумура Харухико ) , но вместо арифметического кодирования используется кодирование Хаффмана . LZARI использует Лемпеля-Зива-Сторера-Шиманского с арифметическим кодированием.
Джо Джаред расширил LZSS, чтобы использовать более крупные словари.
Джаред портировал LZH на Atari. Тот факт, что lh8 — это то же самое, что и lh7, был упущением. Файлы, использующие методы с большими номерами, могут также не существовать, поскольку Джаред считает их только запланированными функциями. [5]
UNLHA32.DLL использует собственный метод для тестирования.
Эти методы сжатия созданы PMarc, архиватором CP/M, созданным Miyo. Архив обычно имеет расширение .PMA.
LArc использует тот же формат файла, что и .LZH, но был написан Казухико Мики, Харухико Окумурой и Кеном Масуямой с расширением ".LZS". [7] Программа, похоже, появилась до LZH. Она использует двоичное дерево поиска в сопоставлении LZ. [8]
Распространенные реализации, по-видимому, поддерживают только lzs, lz5, а также lz4, предназначенный только для хранения.
Существуют копии LHICE, отмеченные как версия 1.14. По словам Окумуры, LHICE не написана Ёсидзаки. [9]
Из-за ошибки временные метки DOS из заголовков уровня 0 и 1 после 2011 года будут установлены на 1980 год, что означает, что некоторые утилиты должны быть исправлены. Это вызвано ошибкой, которая интерпретирует беззнаковое 7-битное битовое поле номера года как 5-битное число. Максимальный год должен быть 2107. [10] [11]
Новые заголовки уровня 2 и 3 используют 32-битное время Unix . Оно страдает от проблемы 2038 года . [12]
По словам Микко, автора популярной библиотеки LHA UNLHA32.DLL, многие реализации LHA не проверяют длину заголовков файлов LHA при чтении архива. Из этого сценария могут возникнуть две проблемы: может произойти переполнение буфера для наивных реализаций, предполагающих максимальный размер 4 КБ из исходной спецификации; антивирусное программное обеспечение может пропускать файлы с такими большими заголовками и не сканировать на вирус. Похожая проблема существует и с ARJ . Микко сообщил об этой проблеме японским властям, но они не считают ее допустимой уязвимостью. [13]
Micco зашел так далеко, что завершил разработку UNLHA32 и посоветовал людям отказаться от этого формата. Тем не менее, они вернулись в 2017 году, чтобы исправить проблему перехвата DLL .