
C-Bibliothek zum Parsen von XML, gepatcht für CVE-2022-25235, die streamorientiertes Parsen mit Handler-Registrierung und Build-Konfigurationsoptionen bietet.
Dies ist Expat, eine C-Bibliothek zum Parsen von XML, begonnen von James Clark im Jahr 1997. Expat ist ein stromorientierter 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
expat_win32-Paket 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 kopieren, verbreiten und modifizieren, die in der Datei
COPYING
enthalten ist, die mit diesem Paket verteilt wird.
Diese Lizenz ist identisch mit der MIT/X Consortium-Lizenz.
Wenn Sie Expat aus einem Check-out aus dem Git-Repository 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 das Erstellen aus einer Quellverteilung.
Um Expat aus einer Quellverteilung zu erstellen, führen Sie zunächst das Konfigurations-Shell-Skript im obersten Verzeichnis der Distribution aus:
./configure
Es gibt viele Optionen, die Sie configure mitgeben können (welche Sie
durch Aufruf von configure mit der Option --help entdecken können). 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
nach /home/me/mystuff/lib, /home/me/mystuff/include und
/home/me/mystuff/bin installieren möchten, teilen Sie configure dies 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 Änderung wäre jedoch ein Breaking Change für das 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, wird der Befehl make die Sachen
erstellen und make install wird die Sachen an den richtigen Ort installieren.
Werfen Sie einen Blick in das Makefile, um weitere make-Optionen zu erfahren.
Beachten Sie, dass Sie Schreibberechtigung in den Verzeichnissen benötigen, in die
die Sachen installiert werden.
Wenn Sie daran interessiert sind, Expat so zu erstellen, dass Dokumentinformationen
in UTF-16-Kodierung statt der standardmäßigen UTF-8 bereitgestellt werden, befolgen Sie
diese Anweisungen (nachdem Sie make distclean ausgeführt haben).
Bitte beachten Sie, dass wir mit --without-xmlwf konfigurieren, da xmlwf diesen
Kompilierungsmodus (noch) nicht unterstützt:
Patchen Sie massenhaft Makefile.am-Dateien, um libexpatw.la als Bibliotheksnamen zu verwenden:
find -name Makefile.am -exec sed -e 's,libexpat\.la,libexpatw.la,' -e 's,libexpat_la,libexpatw_la,' -i {} +
Führen Sie automake aus, um Makefile.in-Dateien neu zu schreiben:
automake
Für UTF-16-Ausgabe als unsigned short (und Versions-/Fehlerstrings als char),
führen Sie aus:
./configure CPPFLAGS=-DXML_UNICODE --without-xmlwf
Für UTF-16-Ausgabe als wchar_t (inkl. Versions-/Fehlerstrings) führen Sie aus:
./configure CFLAGS="-g -O2 -fshort-wchar" CPPFLAGS=-DXML_UNICODE_WCHAR_T --without-xmlwf
Hinweis: Letzteres erfordert ebenfalls eine mit -fshort-wchar kompilierte libc.
Führen Sie make aus (was xmlwf ausschließt).
Führen Sie make install aus (wiederum ohne xmlwf).
Die Verwendung von DESTDIR wird unterstützt. Es funktioniert wie folgt:
make install DESTDIR=/path/to/image
überschreibt das im Makefile gesetzte DESTDIR, 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.
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 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.