
C-Bibliothek für streamorientiertes XML-Parsing mit Schwerpunkt auf Schwachstellenanalyse und Ausnutzung von CVE-2022-43680, die Fuzzing und Sicherheitstests auf Binärebene ermöglicht.
Expat, Version 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 können es unter den Bedingungen der Lizenz kopieren, verbreiten und modifizieren, die in der mit diesem Paket verteilten Datei COPYING enthalten ist. Diese Lizenz ist identisch mit der MIT/X Consortium-Lizenz.
Versionen von Expat mit einer ungeraden Nebenversionsnummer (die mittlere Zahl in der obigen Version) sind Entwicklungsversionen und sollten als Beta-Software betrachtet werden. Versionen mit geraden Nebenversionsnummern sind als produktionsreife Software vorgesehen.
Wenn Sie Expat aus einem Check-out des CVS-Repositorys erstellen, müssen Sie ein Skript ausführen, das das configure-Skript mit den GNU autoconf- und libtool-Werkzeugen generiert. Dazu benötigen Sie autoconf 2.58 oder neuer. Führen Sie das Skript wie folgt aus:
./buildconf.sh
Sobald dies erledigt ist, befolgen Sie die gleichen Anweisungen wie für den Build aus einer Quellverteilung.
Um Expat aus einer Quellverteilung zu erstellen, führen Sie zuerst das Konfigurations-Shell-Skript im obersten Verzeichnis der Distribution aus:
./configure
Es gibt viele Optionen, die Sie configure mitgeben können (die Sie entdecken können, indem Sie configure mit der --help-Option ausführen). Aber die interessanteste ist die, die das Installationsverzeichnis festlegt. Standardmäßig richtet das configure-Skript alles so ein, dass libexpat nach /usr/local/lib, expat.h nach /usr/local/include und xmlwf nach /usr/local/bin installiert wird. Wenn Sie beispielsweise bevorzugen, nach /home/me/mystuff/lib, /home/me/mystuff/include und /home/me/mystuff/bin zu installieren, können Sie configure das mitteilen 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 gesamten Byte-Index:
./configure CPPFLAGS=-DXML_LARGE_SIZE
Eine solche Änderung wäre jedoch ein Breaking Change des ABI und wird daher nicht für den allgemeinen Gebrauch empfohlen – z.B. als Teil einer Linux-Distribution – sondern eher für Builds mit besonderen Anforderungen.
Nach dem Ausführen des configure-Skripts wird der Befehl "make" die Dinge erstellen und "make install" wird sie an den richtigen Ort installieren. 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 statt der Standard-UTF-8 bereitzustellen, befolgen Sie diese 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 aus:
./configure CPPFLAGS=-DXML_UNICODE
Für UTF-16-Ausgabe als wchar_t (einschließlich Versions-/Fehlerstrings), führen Sie aus:
./configure CFLAGS="-g -O2 -fshort-wchar" \
CPPFLAGS=-DXML_UNICODE_WCHAR_T
2. Bearbeiten Sie das Makefile und ändern Sie:
LIBRARY = libexpat.la
zu:
LIBRARY = libexpatw.la
(Beachten Sie das zusätzliche "w" im Bibliotheksnamen.)
3. Führen Sie "make buildlib" aus (das nur die Bibliothek erstellt). Oder, um Schritt 2 zu sparen, führen Sie "make buildlib LIBRARY=libexpatw.la" aus.
4. Führen Sie "make installlib" aus (das nur die Bibliothek installiert). Oder, 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 des Makefiles nur DESTDIR verwendet. Es funktioniert wie folgt: $ make install DESTDIR=/path/to/image überschreibt das im Makefile gesetzte DESTDIR, während beide $ INSTALL_ROOT=/path/to/image make install $ make install INSTALL_ROOT=/path/to/image DESTDIR=$(INSTALL_ROOT) verwenden, selbst wenn DESTDIR letztendlich in der Umgebung definiert ist, weil 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 PATH 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 – anscheinend versteht es keine .PHONY-Direktiven). 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 Prüf-Makro in conftools/expat.m4 verwenden, um zu bestimmen, wie Expat eingebunden werden soll. Siehe die Kommentare am Anfang dieser Datei für weitere Informationen.
Ein Referenzhandbuch ist in der Datei doc/reference.html in dieser Distribution verfügbar.
Die Homepage für dieses Projekt ist http://www.libexpat.org/. Dort gibt es Links, die Sie zur Seite für Fehlermeldungen führen. Wenn Sie einen Fehler melden müssen und keinen Zugriff auf einen Browser haben, können Sie eine Fehlermeldung auch per E-Mail an [email protected] senden.
Diskussionen zur zukünftigen Entwicklung von Expat finden auf [email protected] statt. Archive dieser Liste und anderer Expat-bezogener Listen finden Sie unter:
http://mail.libexpat.org/mailman/listinfo/