18:34 2020/08/29

Действительно magic

На продакшн-сервере обнаружилась проблема, возникала ошибка загрузки SVG файла. В ошибке явно выводился mime-type файла как text/plain, хотя сам файл загружался корректный.

При этом что на локалке, и на тестовом сайте mime-type определялся строго как SVG - image/svg. Для определения типа файла использовалась пакет python-magic, которая в свою очередь является оберткой для системной библиотеки libmagic. Версия пакета одинаковая на всех серверах. Но на локалке OSX, на тестовом Ubuntu 18.04.5 LTS, а на боевом Ubuntu 16.04.5 LTS. Так может разные версии пакетов еще повлияли?

Нахожу в коде информацию, что используется для линукса библиотека libmagic.so.1, проверяю её зависимости на тестовом и продакшне командой ldd /usr/lib/x86_64-linux-gnu/libmagic.so.1 и не нахожу расхождений. В обоих случаях используются libz.so.1 и libc.so.6

По мажорным версиям все ок, значит ошибка в минорной версии. Сначала выясняю на тестовом dpkg -S /usr/lib/x86_64-linux-gnu/libmagic.so.1 - библиотека относится к пакету libmagic1:amd64. А точная версия пакета apt show libmagic1:amd64 | grep Ver - 1:5.32-2ubuntu0.4

В продакшне эта версия - 1:5.25-2ubuntu1.3. Отсюда делаем вывод, что как минимум до этой версии включительно нельзя доверять пакету libmagic на определение типа файла SVG.

Напоследок, выкладываю код с правкой по валидации с учетом возможного неверного определения MIME-типа: