
C-библиотека для разбора XML, специально пропатченная для CVE-2022-23990, предоставляющая эталонную реализацию для анализа уязвимостей и практик безопасного кодирования.
Это Expat, библиотека на C для разбора XML, созданная Джеймсом Кларком в 1997 году. Expat — это потоковый анализатор XML. Это означает, что вы регистрируете обработчики в анализаторе перед началом разбора. Эти обработчики вызываются, когда анализатор обнаруживает соответствующие структуры в разбираемом документе. Открывающий тег является примером структуры, для которой вы можете зарегистрировать обработчики.
Пользователям Windows следует использовать
пакет expat_win32,
который включает как предварительно скомпилированные библиотеки и исполняемые файлы, так и исходный код для разработчиков.
Expat — это свободное программное обеспечение.
Вы можете копировать, распространять и модифицировать его на условиях лицензии,
содержащейся в файле
COPYING,
распространяемом вместе с этим пакетом.
Эта лицензия идентична лицензии MIT/X Consortium.
Если вы собираете Expat из клона Git-репозитория, вам нужно запустить скрипт, который генерирует сценарий configure с помощью инструментов GNU autoconf и libtool. Для этого вам понадобится autoconf версии 2.58 или новее. Запустите скрипт так:
./buildconf.sh
После этого следуйте тем же инструкциям, что и для сборки из исходного дистрибутива.
Чтобы собрать Expat из исходного дистрибутива, сначала запустите сценарий настройки в корневом каталоге дистрибутива:
./configure
Существует множество опций, которые вы можете передать configure (вы можете узнать о них, запустив configure с опцией --help). Но наибольший интерес представляет опция, задающая каталог установки. По умолчанию сценарий configure настроит установку libexpat в /usr/local/lib, expat.h в /usr/local/include и xmlwf в /usr/local/bin. Если, например, вы хотите установить в /home/me/mystuff/lib, /home/me/mystuff/include и /home/me/mystuff/bin, сообщите об этом configure так:
./configure --prefix=/home/me/mystuff
Ещё одна интересная опция — включение поддержки 64-битных целых чисел для номеров строк и столбцов, а также общего индекса байтов:
./configure CPPFLAGS=-DXML_LARGE_SIZE
Однако такая модификация будет нарушающим изменением ABI, и поэтому не рекомендуется для общего использования — например, в составе дистрибутива Linux — а скорее для сборок с особыми требованиями.
После выполнения сценария configure команда make соберёт проект, а make install установит файлы в соответствующие каталоги. Ознакомьтесь с Makefile, чтобы узнать о дополнительных опциях make. Обратите внимание, что для установки необходимы права на запись в целевые каталоги.
Если вы хотите собрать Expat для вывода информации о документе в кодировке UTF-16 вместо стандартной UTF-8, следуйте этим инструкциям (после выполнения make distclean). Обратите внимание, что мы вызываем configure с опцией --without-xmlwf, так как xmlwf пока не поддерживает этот режим компиляции:
Массово исправьте файлы Makefile.am, чтобы использовать libexpatw.la в качестве имени библиотеки:
find -name Makefile.am -exec sed -e 's,libexpat\.la,libexpatw.la,' -e 's,libexpat_la,libexpatw_la,' -i {} +
Запустите automake для перезаписи файлов Makefile.in:
automake
Для вывода UTF-16 в виде unsigned short (и строк версии/ошибок в виде char) выполните:
./configure CPPFLAGS=-DXML_UNICODE --without-xmlwf
Для вывода UTF-16 в виде wchar_t (включая строки версии/ошибок) выполните:
./configure CFLAGS="-g -O2 -fshort-wchar" CPPFLAGS=-DXML_UNICODE_WCHAR_T --without-xmlwf
Примечание: последний вариант требует, чтобы libc также была скомпилирована с -fshort-wchar.
Выполните make (который исключает xmlwf).
Выполните make install (опять же, исключая xmlwf).
Поддерживается использование DESTDIR. Это работает следующим образом:
make install DESTDIR=/path/to/image
переопределяет DESTDIR, заданный в Makefile, так как приоритет установки переменных:
Примечание: это относится только к самой библиотеке Expat; сборка UTF-16 версий xmlwf и тестов в настоящее время не поддерживается.
При использовании Expat в проекте, который применяет autoconf для настройки, вы можете использовать макрос проверки из conftools/expat.m4, чтобы определить, как подключать Expat. Смотрите комментарии в начале этого файла для получения дополнительной информации.
Справочное руководство доступно в файле doc/reference.html в этом дистрибутиве.