
Repository del codice sorgente per Expat 2.1.0, una libreria parser XML orientata allo stream, con focus sull'analisi e risoluzione di CVE-2022-43680.
Expat, versione 2.1.0
Questo è Expat, una libreria C per l'analisi di XML, scritta da James Clark. Expat è un parser XML orientato ai flussi. Ciò significa che è necessario registrare dei gestori (handler) presso il parser prima di iniziare l'analisi. Questi gestori vengono chiamati quando il parser scopre le strutture associate nel documento analizzato. Un tag di apertura è un esempio del tipo di strutture per cui è possibile registrare gestori.
Gli utenti Windows dovrebbero utilizzare il pacchetto expat_win32bin, che include sia librerie precompilate ed eseguibili, sia codice sorgente per sviluppatori.
Expat è software libero. È possibile copiarlo, distribuirlo e modificarlo secondo i termini della licenza contenuta nel file COPYING distribuito con questo pacchetto. Questa licenza è la stessa della licenza MIT/X Consortium.
Le versioni di Expat che hanno un numero di versione minore dispari (il numero centrale nel rilascio sopra) sono versioni di sviluppo e devono essere considerate come software beta. Le versioni con numeri di versione minore pari sono destinate a essere software di livello di produzione.
Se si sta costruendo Expat da un checkout dal repository CVS, è necessario eseguire uno script che genera lo script configure utilizzando gli strumenti GNU autoconf e libtool. Per fare ciò, è necessario avere autoconf 2.58 o superiore. Eseguire lo script in questo modo:
./buildconf.sh
Una volta fatto ciò, seguire le stesse istruzioni per la costruzione da una distribuzione sorgente.
Per costruire Expat da una distribuzione sorgente, eseguire prima lo script di configurazione shell nella directory di distribuzione di livello superiore:
./configure
Ci sono molte opzioni che è possibile fornire a configure (scopribili eseguendo configure con l'opzione --help). Ma quella di maggiore interesse è quella che imposta la directory di installazione. Per impostazione predefinita, lo script configure imposterà le cose per installare libexpat in /usr/local/lib, expat.h in /usr/local/include e xmlwf in /usr/local/bin. Se, ad esempio, si preferisce installare in /home/me/mystuff/lib, /home/me/mystuff/include e /home/me/mystuff/bin, è possibile comunicarlo a configure con:
./configure --prefix=/home/me/mystuff
Un'altra opzione interessante è abilitare il supporto per interi a 64 bit per i numeri di riga e colonna e l'indice complessivo dei byte:
./configure CPPFLAGS=-DXML_LARGE_SIZE
Tuttavia, tale modifica sarebbe un cambiamento che rompe l'ABI e pertanto non è raccomandata per uso generale - ad esempio come parte di una distribuzione Linux - ma piuttosto per build con requisiti speciali.
Dopo aver eseguito lo script configure, il comando "make" costruirà le cose e "make install" le installerà nella posizione corretta. Dai un'occhiata al "Makefile" per conoscere ulteriori opzioni di "make". Nota che devi avere il permesso di scrittura nelle directory in cui verranno installate le cose.
Se sei interessato a costruire Expat per fornire informazioni del documento in codifica UTF-16 anziché UTF-8 predefinita, segui queste istruzioni (dopo aver eseguito "make distclean"):
1. Per l'output UTF-16 come unsigned short (e stringhe di versione/errore come char), esegui:
./configure CPPFLAGS=-DXML_UNICODE
Per l'output UTF-16 come wchar_t (incluse le stringhe di versione/errore), esegui:
./configure CFLAGS="-g -O2 -fshort-wchar" \
CPPFLAGS=-DXML_UNICODE_WCHAR_T
2. Modifica il MakeFile, cambiando:
LIBRARY = libexpat.la
in:
LIBRARY = libexpatw.la
(Nota la "w" aggiuntiva nel nome della libreria.)
3. Esegui "make buildlib" (che costruisce solo la libreria).
Oppure, per saltare il passaggio 2, esegui "make buildlib LIBRARY=libexpatw.la".
4. Esegui "make installlib" (che installa solo la libreria).
Oppure, se il passaggio 2 è stato omesso, esegui "make installlib LIBRARY=libexpatw.la".
L'uso di DESTDIR o INSTALL_ROOT è abilitato, con INSTALL_ROOT che è il valore predefinito per DESTDIR, e il resto del makefile utilizza solo DESTDIR. Funziona come segue: $ make install DESTDIR=/path/to/image sovrascrive DESTDIR impostato nel makefile, mentre entrambi $ INSTALL_ROOT=/path/to/image make install $ make install INSTALL_ROOT=/path/to/image usano DESTDIR=$(INSTALL_ROOT), anche se DESTDIR è eventualmente definito nell'ambiente, perché la priorità di impostazione delle variabili è
Nota: Questo vale solo per la libreria Expat stessa; la costruzione di versioni UTF-16 di xmlwf e dei test attualmente non è supportata.
Nota per gli utenti Solaris: Il comando "ar" si trova solitamente in "/usr/ccs/bin", che non è nel PATH predefinito. Dovrai aggiungerlo al tuo PATH per il comando "make", e probabilmente passare anche a GNU make (il "make" trovato in /usr/ccs/bin non sembra funzionare correttamente -- apparentemente non comprende le direttive .PHONY). Se stai usando ksh o bash, usa questo comando per costruire:
PATH=/usr/ccs/bin:$PATH make
Quando si utilizza Expat con un progetto che utilizza autoconf per la configurazione, è possibile utilizzare la macro di rilevamento in conftools/expat.m4 per determinare come includere Expat. Vedi i commenti all'inizio di quel file per maggiori informazioni.
Un manuale di riferimento è disponibile nel file doc/reference.html in questa distribuzione.
La homepage di questo progetto è http://www.libexpat.org/. Ci sono link lì per collegarti alla pagina di segnalazione bug. Se hai bisogno di segnalare un bug quando non hai accesso a un browser, puoi anche inviare una segnalazione via email a [email protected].
La discussione relativa alla direzione dello sviluppo futuro di Expat ha luogo su [email protected]. Gli archivi di questa lista e di altre liste relative a Expat possono essere trovati a:
http://mail.libexpat.org/mailman/listinfo/