
Biblioteca C para análisis XML orientado a flujos, con un enfoque en el análisis de la vulnerabilidad CVE-2022-43680 y la investigación de explotación.
Expat, Versión 2.1.0
Esto es Expat, una biblioteca C para analizar XML, escrita por James Clark. Expat es un analizador XML orientado a flujos. Esto significa que registras manejadores con el analizador antes de iniciar el análisis. Estos manejadores son llamados cuando el analizador descubre las estructuras asociadas en el documento que se está analizando. Una etiqueta de apertura es un ejemplo del tipo de estructuras para las que puedes registrar manejadores.
Los usuarios de Windows deberían usar el paquete expat_win32bin, que incluye tanto bibliotecas precompiladas como ejecutables, y código fuente para desarrolladores.
Expat es software libre. Puedes copiarlo, distribuirlo y modificarlo bajo los términos de la Licencia contenida en el archivo COPYING distribuido con este paquete. Esta licencia es la misma que la licencia MIT/X Consortium.
Las versiones de Expat que tienen un número de versión menor impar (el número del medio en la versión anterior), son versiones de desarrollo y deben considerarse como software beta. Las versiones con números de versión menor pares están destinadas a ser software de grado de producción.
Si estás construyendo Expat desde un checkout del repositorio CVS, necesitas ejecutar un script que genere el script configure usando las herramientas GNU autoconf y libtool. Para hacer esto, necesitas tener autoconf 2.58 o más reciente. Ejecuta el script así:
./buildconf.sh
Una vez hecho esto, sigue las mismas instrucciones que para construir desde una distribución de fuente.
Para construir Expat desde una distribución de fuente, primero ejecuta el script de configuración shell en el directorio de distribución de nivel superior:
./configure
Hay muchas opciones que puedes proporcionar a configure (que puedes descubrir ejecutando configure con la opción --help). Pero la de mayor interés es la que establece el directorio de instalación. Por defecto, el script configure configurará las cosas para instalar libexpat en /usr/local/lib, expat.h en /usr/local/include y xmlwf en /usr/local/bin. Si, por ejemplo, prefieres instalar en /home/me/mystuff/lib, /home/me/mystuff/include y /home/me/mystuff/bin, puedes informar a configure sobre eso con:
./configure --prefix=/home/me/mystuff
Otra opción interesante es habilitar el soporte de enteros de 64 bits para números de línea y columna y el índice general de bytes:
./configure CPPFLAGS=-DXML_LARGE_SIZE
Sin embargo, tal modificación sería un cambio incompatible con la ABI y por lo tanto no se recomienda para uso general - por ejemplo, como parte de una distribución de Linux - sino más bien para compilaciones con requisitos especiales.
Después de ejecutar el script configure, el comando "make" construirá las cosas y "make install" las instalará en su ubicación adecuada. Echa un vistazo al "Makefile" para conocer opciones adicionales de "make". Ten en cuenta que necesitas tener permiso de escritura en los directorios en los que se instalarán las cosas.
Si estás interesado en construir Expat para proporcionar información de documento en codificación UTF-16 en lugar de la UTF-8 predeterminada, sigue estas instrucciones (después de haber ejecutado "make distclean"):
1. Para salida UTF-16 como unsigned short (y cadenas de versión/error como char), ejecuta:
./configure CPPFLAGS=-DXML_UNICODE
Para salida UTF-16 como wchar_t (incluyendo cadenas de versión/error), ejecuta:
./configure CFLAGS="-g -O2 -fshort-wchar" \
CPPFLAGS=-DXML_UNICODE_WCHAR_T
2. Edita el MakeFile, cambiando:
LIBRARY = libexpat.la
a:
LIBRARY = libexpatw.la
(Nota la "w" adicional en el nombre de la biblioteca.)
3. Ejecuta "make buildlib" (que construye solo la biblioteca). O, para ahorrar el paso 2, ejecuta "make buildlib LIBRARY=libexpatw.la".
4. Ejecuta "make installlib" (que instala solo la biblioteca). O, si se omitió el paso 2, ejecuta "make installlib LIBRARY=libexpatw.la".
El uso de DESTDIR o INSTALL_ROOT está habilitado, siendo INSTALL_ROOT el valor predeterminado para DESTDIR, y el resto del archivo make usa solo DESTDIR. Funciona de la siguiente manera: $ make install DESTDIR=/path/to/image sobrescribe el DESTDIR establecido en el makefile, mientras que ambos $ INSTALL_ROOT=/path/to/image make install $ make install INSTALL_ROOT=/path/to/image usan DESTDIR=$(INSTALL_ROOT), incluso si DESTDIR está definido en el entorno, porque la prioridad de establecimiento de variables es
Nota: Esto solo aplica a la biblioteca Expat en sí, la construcción de versiones UTF-16 de xmlwf y las pruebas actualmente no es compatible.
Nota para usuarios de Solaris: El comando "ar" suele estar ubicado en "/usr/ccs/bin", que no está en el PATH predeterminado. Deberás agregar esto a tu path para el comando "make", y probablemente también cambiar a GNU make (el "make" que se encuentra en /usr/ccs/bin no parece funcionar correctamente -- aparentemente no entiende directivas .PHONY). Si estás usando ksh o bash, usa este comando para construir:
PATH=/usr/ccs/bin:$PATH make
Cuando uses Expat con un proyecto que use autoconf para configuración, puedes usar la macro de sondeo en conftools/expat.m4 para determinar cómo incluir Expat. Consulta los comentarios al inicio de ese archivo para más información.
Un manual de referencia está disponible en el archivo doc/reference.html en esta distribución.
La página principal de este proyecto es http://www.libexpat.org/. Allí hay enlaces que te conectan a la página de informes de errores. Si necesitas informar un error cuando no tienes acceso a un navegador, también puedes enviar un informe de error por correo electrónico a [email protected].
Las discusiones relacionadas con la dirección del desarrollo futuro de expat tienen lugar en [email protected]. Los archivos de esta lista y otras listas relacionadas con Expat se pueden encontrar en:
http://mail.libexpat.org/mailman/listinfo/