
Библиотека на C для разбора XML, пропатченная для CVE-2022-25315, обеспечивающая потоковый разбор XML с обработчиками для эффективной обработки документов.
Это 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).
Обратите внимание, что мы настраиваем с --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
переопределяет установленный в makefile DESTDIR, потому что приоритет установки переменных следующий:
Примечание: это относится только к самой библиотеке Expat; сборка UTF-16 версий xmlwf и тестов в настоящее время не поддерживается.
Если вы используете Expat в проекте, где для настройки применяется autoconf,
вы можете использовать макрос проверки в conftools/expat.m4, чтобы определить, как
подключать Expat. Дополнительную информацию см. в комментариях в начале этого файла.
Справочное руководство доступно в файле doc/reference.html в этом
дистрибутиве.