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