
Biblioteca analisadora de XML orientada a fluxo em C, corrigida para os CVEs CVE-2021-45960 e CVE-2021-46143, fornecendo análise segura de XML para aplicações críticas de segurança.
Este é o Expat, uma biblioteca C para analisar XML, iniciada por James Clark em 1997. Expat é um analisador XML orientado a fluxo. Isso significa que você registra manipuladores (handlers) com o analisador antes de iniciar a análise. Esses manipuladores são chamados quando o analisador descobre as estruturas associadas no documento sendo analisado. Uma tag de abertura é um exemplo do tipo de estruturas para as quais você pode registar manipuladores.
Usuários do Windows devem usar o
expat_win32 pacote,
que inclui bibliotecas pré-compiladas e executáveis, e código fonte para
desenvolvedores.
Expat é software livre.
Você pode copiar, distribuir e modificá-lo sob os termos da Licença
contida no arquivo
COPYING
distribuído com este pacote.
Esta licença é a mesma da licença MIT/X Consortium.
Se você estiver compilando o Expat a partir de um checkout do repositório Git, você precisa executar um script que gera o script configure usando as ferramentas GNU autoconf e libtool. Para fazer isso, você precisa ter autoconf 2.58 ou mais recente. Execute o script assim:
./buildconf.sh
Depois que isso for feito, siga as mesmas instruções para compilar a partir de uma distribuição fonte.
Para compilar o Expat a partir de uma distribuição fonte, primeiro execute o script de configuração no diretório raiz da distribuição:
./configure
Existem muitas opções que você pode fornecer ao configure (que você pode
descobrir executando configure com a opção --help). Mas a
mais interessante é a que define o diretório de instalação.
Por padrão, o script configure irá configurar as coisas para instalar
libexpat em /usr/local/lib, expat.h em /usr/local/include, e
xmlwf em /usr/local/bin. Se, por exemplo, você preferir instalar
em /home/me/mystuff/lib, /home/me/mystuff/include, e
/home/me/mystuff/bin, você pode informar ao configure sobre isso com:
./configure --prefix=/home/me/mystuff
Outra opção interessante é ativar o suporte a inteiros de 64 bits para números de linha e coluna e o índice geral de bytes:
./configure CPPFLAGS=-DXML_LARGE_SIZE
No entanto, tal modificação seria uma mudança crítica para a ABI e, portanto, não é recomendada para uso geral — por exemplo, como parte de uma distribuição Linux — mas sim para compilações com requisitos especiais.
Após executar o script configure, o comando make irá compilar as
coisas e make install irá instalá-las em seus devidos lugares.
Dê uma olhada no Makefile para aprender sobre opções adicionais
do make. Note que você precisa ter permissão de escrita nos
diretórios onde as coisas serão instaladas.
Se você estiver interessado em compilar o Expat para fornecer informações
do documento na codificação UTF-16 em vez do UTF-8 padrão, siga estas
instruções (após executar make distclean).
Observe que configuramos com --without-xmlwf pois o xmlwf ainda não
suporta este modo de compilação:
Aplique patches em massa nos arquivos Makefile.am para usar libexpatw.la como nome da biblioteca:
find -name Makefile.am -exec sed -e 's,libexpat\.la,libexpatw.la,' -e 's,libexpat_la,libexpatw_la,' -i {} +
Execute automake para reescrever os arquivos Makefile.in:
automake
Para saída UTF-16 como unsigned short (e strings de versão/erro como char),
execute:
./configure CPPFLAGS=-DXML_UNICODE --without-xmlwf
Para saída UTF-16 como wchar_t (incl. strings de versão/erro), execute:
./configure CFLAGS="-g -O2 -fshort-wchar" CPPFLAGS=-DXML_UNICODE_WCHAR_T --without-xmlwf
Nota: Este último requer libc compilada com -fshort-wchar, também.
Execute make (que exclui xmlwf).
O uso de DESTDIR é suportado. Funciona da seguinte forma:
make install DESTDIR=/path/to/image
substitui o DESTDIR definido no Makefile, porque a prioridade de definição de variáveis é
Nota: Isso se aplica apenas à biblioteca Expat em si; atualmente não é suportada a compilação de versões UTF-16 do xmlwf e dos testes.
Ao usar o Expat com um projeto que usa autoconf para configuração,
você pode usar a macro de sondagem em conftools/expat.m4 para determinar como
incluir o Expat. Veja os comentários no topo desse arquivo para mais
informações.
Um manual de referência está disponível no arquivo doc/reference.html nesta
distribuição.
Execute make install (novamente, exclui xmlwf).