
Библиотека на C для разбора, редактирования и сохранения метаданных EXIF, с акцентом на исследование уязвимостей и бинарный анализ для CVE-2020-0181.
libexif -------
libexif — это библиотека для разбора, редактирования и сохранения данных EXIF. Она предназначена для замены множества избыточных реализаций в утилитах командной строки и программах с графическим интерфейсом.
libexif поддерживает разбор, редактирование и сохранение данных EXIF. Кроме того, она имеет поддержку gettext. Поддерживаются все теги EXIF, описанные в стандарте EXIF 2.1 (и большинство из 2.2). Также поддерживаются многие заметки производителей (maker notes) камер Canon, Casio, Epson, Fuji, Nikon, Olympus, Pentax и Sanyo.
libexif написана на чистом C и не требует дополнительных библиотек. Для перевода языков будет использоваться GNU gettext, если он доступен.
libexif может обрабатывать только некоторые заметки производителей, и даже их не очень хорошо. Требуется дополнительная работа. Обратите внимание, что libmnote была объединена с libexif — она больше не нужна.
Мы задокументировали API libexif с помощью doxygen и разместили результаты по адресу http://libexif.sourceforge.net/api/
Короткие тестовые программы в каталоге test иллюстрируют, как создавать корректные данные EXIF с нуля, как сохранять данные EXIF и как загружать данные EXIF из памяти. Также доступно несколько простых примеров программ в каталоге contrib/examples/. Не стесняйтесь обращаться к нам по адресу [email protected], если у вас есть вопросы по использованию libexif.
Для подключения libexif к вашему пакету мы рекомендуем использовать утилиту pkgconfig (см. http://www.freedesktop.org/wiki/Software/pkg-config/). Для вашего удобства libexif предоставляет как libexif-uninstalled.pc, так и устанавливает libexif.pc.
На данный момент мне известны следующие оболочки для libexif:
Если вы хотите перевести свою программу на использование libexif или добавить поддержку EXIF, не стесняйтесь обращаться к авторам.
Мне известны следующие библиотеки, которые используют libexif или были вдохновлены ею:
Действия для сборки libexif сильно зависят от вашего окружения. Сборка из исходного архива (tar ball) обычно включает команды:
./configure make sudo make install
При сборке из исходников из CVS может потребоваться что-то вроде следующего:
gettextize mv po/Makevars.template po/Makevars aclocal -I auto-m4 -I m4m autoheader libtoolize --force automake --add-missing autoconf ./configure make
Или, возможно, просто:
autoreconf -i ./configure make
Помимо стандартных аргументов, configure принимает несколько специфичных для libexif:
--disable-docs Отключить создание любой документации --enable-internal-docs Собирать внутреннюю документацию кода, если доступен Doxygen --enable-ship-binaries Включить DLL для Windows в 'make dist'
Некоторые специализированные приложения могут уменьшить размер бинарного файла libexif, установив один или оба из следующих макросов в переменной окружения CPPFLAGS во время настройки. Каждый из них удаляет определенные виды текстовых строк и констант из бинарного файла. Приложения, которым необходимо обращаться к определенным известным тегам EXIF и которые заранее знают значение их данных, не нуждаются в этих строках и могут сэкономить значительное пространство, исключив их.
-DNO_VERBOSE_TAG_STRINGS Имена и описания тегов EXIF, отладочные сообщения, обязательные поля EXIF (отключает автоматическое исправление тегов) -DNO_VERBOSE_TAG_DATA Имена содержимого перечисляемых данных тегов
Переводы libexif выполняются волонтерами, работающими самостоятельно, либо напрямую с проектом libexif, либо через один из двух координационных сайтов перевода: Translation Project http://translationproject.org/domain/libexif.html и Launchpad https://translations.edge.launchpad.net/ubuntu/precise/+source/libexif/+pots/libexif-12. Любые обновления языковых переводов, координируемые Translation Project, должны выполняться через их веб-сайт, но все остальные языки могут обновляться либо через Launchpad (предпочтительно), либо путем отправки обновлений напрямую в список рассылки разработчиков libexif. На момент написания следующие языки должны обновляться через Translation Project: cs da de es fr it ja nl pl sk sv uk vi
Если вы заинтересованы в переводе libexif на новый язык, мы рекомендуем присоединиться к одной из вышеуказанных групп переводчиков и воспользоваться системами, которые они создали для помощи вам. Отказ от ответственности за перевод НЕ требуется для libexif в Translation Project; выполняя перевод, вы неявно соглашаетесь предоставить его на тех же условиях лицензии, что и остальная часть libexif (LGPL).
libexif изначально написана Кёртисом Гэллоуэем [email protected]. Из-за того, что оригинальный дизайн не поддерживал редактирование и сохранение, Лутц Мюллер [email protected] переписал libexif с нуля. С тех пор многие другие люди внесли свой вклад в libexif.
Некоторые ссылки, которые могут вас заинтересовать, если вы хотите получить дополнительную информацию о EXIF.