
Quellcode-Repository für Expat 2.1.0, eine stromorientierte XML-Parser-Bibliothek, mit Schwerpunkt auf der Analyse und Behebung von CVE-2022-43680.
Expat, Version 2.1.0
Dies ist Expat, eine C-Bibliothek zum Parsen von XML, geschrieben von James Clark. Expat ist ein streamorientierter XML-Parser. Das bedeutet, dass Sie Handler beim Parser registrieren, bevor Sie mit dem Parsen beginnen. 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 als auch ausführbare Dateien sowie Quellcode für Entwickler enthält.
Expat ist freie Software. Sie dürfen es unter den Bedingungen der Lizenz kopieren, verbreiten und modifizieren, die in der diesem Paket beiliegenden Datei COPYING enthalten ist. Diese Lizenz ist dieselbe wie die MIT/X-Consortium-Lizenz.
Versionen von Expat mit einer ungeraden Nebenversionsnummer (die mittlere Zahl in der obigen Versionsangabe) sind Entwicklungsversionen und sollten als Beta-Software betrachtet werden. Versionen mit geraden Nebenversionsnummern sind für den Produktionseinsatz gedacht.
Wenn Sie Expat aus einem Check-out aus dem CVS-Repository erstellen, müssen Sie ein Skript ausführen, das das configure-Skript mithilfe der GNU-Autoconf- und Libtool-Werkzeuge erzeugt. 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 dieselben Anweisungen wie für den Bau aus einer Quellcode-Distribution.
Um Expat aus einer Quellcode-Distribution zu erstellen, führen Sie zuerst das Konfigurations-Shellskript im obersten Verzeichnis der Distribution aus:
./configure
Es gibt viele Optionen, die Sie an configure übergeben können (die Sie entdecken können, indem Sie configure mit der Option --help ausführen). Die interessanteste ist jedoch die, die das Installationsverzeichnis festlegt. Standardmäßig richtet das configure-Skript die Installation so ein, dass libexpat in /usr/local/lib, expat.h in /usr/local/include und xmlwf in /usr/local/bin installiert werden. Wenn Sie zum Beispiel lieber in /home/me/mystuff/lib, /home/me/mystuff/include und /home/me/mystuff/bin installieren möchten, können Sie configure das wie folgt mitteilen:
./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 Änderung wäre jedoch eine inkompatible Änderung der 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.
Nachdem Sie das configure-Skript ausgeführt haben, erstellt der Befehl „make" die Dateien und „make install" installiert sie am richtigen Ort. Werfen Sie einen Blick auf die „Makefile", um weitere „make"-Optionen kennenzulernen. Beachten Sie, dass Sie Schreibrechte in den Verzeichnissen benötigen, in die die Dateien installiert werden.
Wenn Sie Expat so erstellen möchten, dass Dokumentinformationen in UTF-16-Kodierung statt der standardmäßigen UTF-8-Kodierung bereitgestellt werden, 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 (einschl. Versions-/Fehlerstrings), führen Sie aus:
./configure CFLAGS="-g -O2 -fshort-wchar" \
CPPFLAGS=-DXML_UNICODE_WCHAR_T
2. Bearbeiten Sie die 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 (was 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 (was nur die Bibliothek installiert).
Oder, falls 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 Makefile nur DESTDIR verwendet. Es funktioniert wie folgt: $ make install DESTDIR=/path/to/image überschreibt das in der Makefile gesetzte DESTDIR, während beide $ INSTALL_ROOT=/path/to/image make install $ make install INSTALL_ROOT=/path/to/image DESTDIR=$(INSTALL_ROOT) verwenden, auch wenn DESTDIR letztendlich in der Umgebung definiert ist, da die Priorität der Variablensetzung wie folgt 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", das nicht im Standard-PATH enthalten ist. Sie müssen dies für den Befehl „make" zu Ihrem Pfad hinzufügen und wahrscheinlich auch zu GNU make wechseln (das „make" in /usr/ccs/bin scheint nicht richtig zu funktionieren – offenbar versteht es keine .PHONY-Anweisungen). Wenn Sie ksh oder bash verwenden, führen Sie diesen Befehl zum Erstellen aus:
PATH=/usr/ccs/bin:$PATH make
Wenn Sie Expat mit einem Projekt verwenden, das autoconf zur Konfiguration einsetzt, können Sie das Abfrage-Makro in conftools/expat.m4 verwenden, um zu bestimmen, wie Expat eingebunden werden soll. 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 finden Sie Links, die Sie zur Fehlerberichtsseite führen. Wenn Sie einen Fehler melden müssen und keinen Browser zur Verfügung haben, können Sie einen Fehlerbericht auch per E-Mail an [email protected] senden.
Diskussionen über die 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/