
Gepatchte Version des Expat-XML-Parsers für AOSP10, die CVE-2022-25236 adressiert. Bietet Quellcode für Schwachstellenanalyse und pädagogische Überprüfung des Fixes.
Dies ist Expat, eine C-Bibliothek zum Parsen von XML, die 1997 von James Clark gestartet wurde. Expat ist ein stromorientierter XML-Parser. Das bedeutet, dass Sie beim Parser Handler 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, die in der mit diesem Paket
verteilten Datei
COPYING
enthalten ist, kopieren, weitergeben und modifizieren.
Diese Lizenz ist identisch mit der MIT/X Consortium-Lizenz.
Wenn Sie Expat aus einem Checkout 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 müssen Sie autoconf 2.58 oder neuer haben. Führen Sie das Skript wie folgt aus:
./buildconf.sh
Sobald 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 zunächst das Konfigurations-Shell-Skript im obersten Verzeichnis der Verteilung aus:
./configure
Es gibt viele Optionen, die Sie configure übergeben können (diese finden Sie
heraus, indem Sie configure mit der Option --help ausführen). Die
interessanteste davon ist diejenige, die das Installationsverzeichnis festlegt.
Standardmäßig wird das configure-Skript libexpat nach /usr/local/lib, expat.h
nach /usr/local/include und xmlwf nach /usr/local/bin installieren.
Wenn Sie beispielsweise nach /home/me/mystuff/lib, /home/me/mystuff/include
und /home/me/mystuff/bin installieren möchten, können Sie configure dies 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 und den Gesamt-Byte-Index:
./configure CPPFLAGS=-DXML_LARGE_SIZE
Eine solche Änderung wäre jedoch ein Bruch der ABI und wird daher nicht für die allgemeine Verwendung empfohlen — z. B. als Teil einer Linux-Distribution —, sondern eher für Builds mit besonderen Anforderungen.
Nachdem Sie das configure-Skript ausgeführt haben, 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 zusätzliche make-Optionen
kennenzulernen. Beachten Sie, dass Sie Schreibberechtigung in den Verzeichnissen
haben müssen, in die die Dinge installiert werden.
Wenn Sie daran interessiert sind, Expat so zu erstellen, dass Dokumentinformationen
in UTF-16-Kodierung anstelle des standardmäßigen UTF-8 bereitgestellt werden,
folgen Sie diesen 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:
Massives Patchen der 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 die Makefile.in-Dateien neu zu schreiben:
automake
Für UTF-16-Ausgabe als unsigned short (und Version/Fehlerstrings als char)
führen Sie aus:
./configure CPPFLAGS=-DXML_UNICODE --without-xmlwf
Für UTF-16-Ausgabe als wchar_t (einschließlich Version/Fehlerstrings)
führen Sie aus:
./configure CFLAGS="-g -O2 -fshort-wchar" CPPFLAGS=-DXML_UNICODE_WCHAR_T --without-xmlwf
Hinweis: Letzteres erfordert libc, das ebenfalls mit -fshort-wchar
kompiliert wurde.
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 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.
Wenn Sie Expat in 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. Weitere Informationen finden Sie in den Kommentaren
am Anfang dieser Datei.
Ein Referenzhandbuch ist in der Datei doc/reference.html in dieser Verteilung
verfügbar.