LHA o LZH es una utilidad de compresión de software libre y un formato de archivo asociado. Fue creada en 1988 por Haruyasu Yoshizaki (吉崎栄泰, Yoshizaki Haruyasu ) , un médico, y originalmente se llamó LHarc . Una reescritura completa de LHarc, llamada provisionalmente LHx , finalmente se lanzó como LH . Luego se renombró como LHA para evitar conflictos con el entonces nuevo comando MS-DOS 5.0 LH ("load high"). El LHA original y su puerto para Windows , LHA32, ya no están en desarrollo porque Yoshizaki está ocupado en el trabajo. [1]
Aunque ya no se usa mucho en Occidente, LHA siguió siendo popular en Japón hasta la década de 2000. [2] Fue utilizado por id Software para comprimir archivos de instalación para sus juegos anteriores, incluidos Doom y Quake . Debido a que algunas versiones de LHA se han distribuido con código fuente bajo la licencia permisiva , LHA se ha adaptado a muchos sistemas operativos y sigue siendo el principal formato de archivo utilizado en la computadora Amiga , aunque compitió con LZX a mediados de la década de 1990. Esto se debió a que Aminet , el archivo más grande del mundo de software y archivos relacionados con Amiga, estandarizó la implementación de LHA de Stefan Boberg para Amiga.
Microsoft lanzó el complemento Microsoft Compressed Folder (LZH), que fue diseñado para la versión japonesa de Windows XP . [3] La versión japonesa de Windows 7 viene con el complemento de carpeta LZH incorporado. [4] Los usuarios de versiones no japonesas de Windows 7 Enterprise y Ultimate también pueden instalar el complemento de carpeta LZH instalando el paquete de idioma japonés opcional desde Windows Update .
En un archivo LZH, el método de compresión se almacena como una cadena de texto de cinco bytes, por ejemplo, -lz1- . Estos son los bytes tercero a séptimo del archivo.
LHarc comprime archivos usando un algoritmo del producto LZHUF anterior de Yoshizaki, que fue modificado de LZARI desarrollado por Haruhiko Okumura (奥村晴彦, Okumura Haruhiko ) , pero usa codificación Huffman en lugar de codificación aritmética . LZARI utiliza Lempel – Ziv – Storer – Szymanski con codificación aritmética.
Joe Jared amplió LZSS para utilizar diccionarios más grandes.
Jared adaptó LZH a Atari. El hecho de que lh8 sea igual que lh7 fue un descuido. Los archivos que utilizan métodos con números más grandes bien podrían no existir, ya que Jared solo los considera funciones planificadas. [5]
UNLHA32.DLL utiliza su propio método para fines de prueba.
Estos métodos de compresión son creados por PMarc, un archivador CP/M creado por Miyo. El archivo normalmente tiene una extensión .PMA.
LArc utiliza el mismo formato de archivo que .LZH, pero fue escrito por Kazuhiko Miki, Haruhiko Okumura y Ken Masuyama, con el nombre de extensión ".LZS". [7] El programa parece haber surgido antes que LZH. Utiliza un árbol de búsqueda binaria en la búsqueda de coincidencias LZ. [8]
Las implementaciones comunes parecen admitir únicamente lzs, lz5 y el lz4 de solo almacenamiento.
Existen copias de LHICE marcadas como versión 1.14. Según Okumura, LHICE no fue escrito por Yoshizaki. [9]
Debido a un error, las marcas de tiempo de DOS de los encabezados de nivel 0 y 1 después del año 2011 se establecerán en 1980, lo que significa que algunas utilidades deben ser parcheadas. Esto se debe a un error que interpreta el campo de bits de número de año de 7 bits sin signo como un número de 5 bits. El año máximo debería ser 2107 en su lugar. [10] [11]
Los encabezados de nivel 2 y 3 más nuevos utilizan un tiempo Unix de 32 bits , pero sufren el problema del año 2038. [ 12]
Según Micco, el autor de la popular biblioteca LHA UNLHA32.DLL, muchas implementaciones LHA no comprueban la longitud de los encabezados de los archivos LHA al leer el archivo. De este escenario podrían surgir dos problemas: puede producirse un desbordamiento del búfer en implementaciones ingenuas que supongan un tamaño máximo de 4 KB a partir de la especificación original; el software antivirus puede pasar por alto archivos con encabezados tan grandes y no escanear en busca de virus. Existe un problema similar con ARJ . Micco informó de este problema a las autoridades japonesas, pero no lo consideran una vulnerabilidad válida. [13]
Micco llegó al extremo de concluir el desarrollo de UNLHA32 y aconsejar a la gente que abandonara el formato. Sin embargo, volvieron en 2017 para solucionar un problema de secuestro de DLL .