
C-Bibliothek für stromorientiertes XML-Parsing, mit Schwerpunkt auf Analyse und Reproduktion der Sicherheitslücke CVE-2024-28757 in Expat 2.1.0.
Expat, Release 2.1.0
Dies ist Expat, eine C-Bibliothek zum Parsen von XML, geschrieben von James Clark. Expat ist ein stromorientierter XML-Parser. Das bedeutet, dass Sie vor dem Start des Parsens Handler beim Parser registrieren. Diese Handler werden aufgerufen, wenn der Parser die zugehörigen Strukturen im zu parsenden Dokument entdeckt. Ein Start-Tag ist ein Beispiel für die Art von Strukturen, für die Sie Handler registrieren können.
Windows-Benutzer sollten das Paket expat_win32bin verwenden, das sowohl vorkompilierte Bibliotheken und ausführbare Dateien als auch Quellcode für Entwickler enthält.
Expat ist freie Software. Sie dürfen es unter den Bedingungen der Lizenz in der Datei COPYING, die zusammen mit diesem Paket verteilt wird, kopieren, weitergeben und modifizieren. Diese Lizenz ist identisch mit der MIT/X Consortium-Lizenz.
Versionen von Expat mit einer ungeraden Nebenversionsnummer (der mittleren Zahl in der obigen Version) sind Entwicklungsversionen und sollten als Beta-Software betrachtet werden. Versionen mit geraden Nebenversionsnummern sind als Produktionssoftware gedacht.
Wenn Sie Expat aus einem Check-out des CVS-Repository erstellen, müssen Sie ein Skript ausführen, das das configure-Skript mit den GNU autoconf- und libtool-Tools generiert. Dazu benötigen Sie autoconf 2.58 oder neuer. Führen Sie das Skript wie folgt aus:
./buildconf.sh
Wenn dies erledigt ist, folgen Sie den gleichen Anweisungen wie für die Erstellung aus einer Quellverteilung.
Um Expat aus einer Quellverteilung zu erstellen, führen Sie zuerst das Konfigurations-Shell-Skript im obersten Verzeichnis der Verteilung aus:
./configure
Es gibt viele Optionen, die Sie configure mitgeben können (die Sie durch Aufruf von configure mit der Option --help entdecken können). Die interessanteste ist jedoch diejenige, die das Installationsverzeichnis festlegt. Standardmäßig legt das configure-Skript fest, dass libexpat in /usr/local/lib, expat.h in /usr/local/include und xmlwf in /usr/local/bin installiert werden. Wenn Sie beispielsweise in /home/me/mystuff/lib, /home/me/mystuff/include und /home/me/mystuff/bin installieren möchten, können Sie configure darüber informieren mit:
./configure --prefix=/home/me/mystuff
Eine weitere interessante Option ist die Aktivierung der 64-Bit-Integer-Unterstützung für Zeilen- und Spaltennummern sowie den Gesamt-Byte-Index:
./configure CPPFLAGS=-DXML_LARGE_SIZE
Eine solche Modifikation wäre jedoch eine brechende Änderung am ABI und wird daher nicht für den allgemeinen Gebrauch empfohlen – z. B. als Teil einer Linux-Distribution –, sondern eher für Builds mit speziellen Anforderungen.
Nachdem Sie das configure-Skript ausgeführt haben, erstellt der Befehl "make" die Dinge und "make install" installiert sie an den richtigen Ort. Werfen Sie einen Blick auf das "Makefile", um weitere "make"-Optionen kennenzulernen. Beachten Sie, dass Sie Schreibberechtigung in den Verzeichnissen benötigen, in die die Dinge installiert werden.
Wenn Sie daran interessiert sind, Expat zu erstellen, um Dokumentinformationen in UTF-16-Kodierung anstelle der Standard-UTF-8 bereitzustellen, folgen Sie diesen Anweisungen (nachdem Sie "make distclean" ausgeführt haben):
1. Für UTF-16-Ausgabe als unsigned short (und Versions-/Fehlerstrings als char), führen Sie:
./configure CPPFLAGS=-DXML_UNICODE
Für UTF-16-Ausgabe als wchar_t (einschließlich Versions-/Fehlerstrings), führen Sie:
./configure CFLAGS="-g -O2 -fshort-wchar" \
CPPFLAGS=-DXML_UNICODE_WCHAR_T
2. Bearbeiten Sie das Makefile und ändern Sie:
LIBRARY = libexpat.la
in:
LIBRARY = libexpatw.la
(Beachten Sie das zusätzliche "w" im Bibliotheksnamen.)
3. Führen Sie "make buildlib" aus (erstellt nur die Bibliothek).
Um Schritt 2 zu sparen, führen Sie "make buildlib LIBRARY=libexpatw.la" aus.
4. Führen Sie "make installlib" aus (installiert nur die Bibliothek).
Wenn Schritt 2 ausgelassen wurde, führen Sie "make installlib LIBRARY=libexpatw.la" aus.
Die Verwendung von DESTDIR oder INSTALL_ROOT ist aktiviert, wobei INSTALL_ROOT der Standardwert für DESTDIR ist und der Rest der Make-Datei nur DESTDIR verwendet. Es funktioniert wie folgt: $ make install DESTDIR=/pfad/zum/image überschreibt das im Makefile gesetzte DESTDIR, während beide $ INSTALL_ROOT=/pfad/zum/image make install $ make install INSTALL_ROOT=/pfad/zum/image DESTDIR=$(INSTALL_ROOT) verwenden, selbst wenn DESTDIR schließlich in der Umgebung definiert ist, da die Priorität der Variablensetzung ist:
Hinweis: Dies gilt nur für die Expat-Bibliothek selbst; das Erstellen von UTF-16-Versionen von xmlwf und der Tests wird derzeit nicht unterstützt.
Hinweis für Solaris-Benutzer: Der Befehl "ar" befindet sich normalerweise in "/usr/ccs/bin", was nicht im Standard-PATH ist. Sie müssen dies zu Ihrem Pfad hinzufügen für den Befehl "make" und wahrscheinlich auch zu GNU make wechseln (das "make" in /usr/ccs/bin scheint nicht richtig zu funktionieren – es scheint .PHONY-Direktiven nicht zu verstehen). Wenn Sie ksh oder bash verwenden, benutzen Sie diesen Befehl zum Erstellen:
PATH=/usr/ccs/bin:$PATH make
Wenn Sie Expat mit einem Projekt verwenden, das autoconf zur Konfiguration nutzt, können Sie das Abfrage-Makro in conftools/expat.m4 verwenden, um zu bestimmen, wie Expat eingebunden wird. Weitere Informationen finden Sie in den Kommentaren am Anfang dieser Datei.
Ein Referenzhandbuch ist in der Datei doc/reference.html in dieser Distribution verfügbar.
Die Homepage dieses Projekts ist http://www.libexpat.org/. Dort gibt es Links zur Bug-Report-Seite. Wenn Sie einen Bug melden müssen und keinen Browser zur Verfügung haben, können Sie einen Bug-Bericht auch per E-Mail an [email protected] senden.
Diskussionen zur Richtung der zukünftigen Expat-Entwicklung finden auf [email protected] statt. Archive dieser Liste und anderer Expat-bezogener Listen finden Sie unter:
http://mail.libexpat.org/mailman/listinfo/