The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Уязвимость в libpng, приводящая к переполнению буфера при обработке PNG-изображений

22.11.2025 10:58

В корректирующем выпуске библиотеки libpng 1.6.51, применяемой в качестве прямой зависимости у около 600 пакетов в Ubuntu, устранены 4 уязвимости, одна из которых (CVE-2025-65018) приводит к записи за границу буфера. Потенциально данная уязвимость позволяет добиться выполнения своего кода при обработке специально оформленных файлов в формате PNG.

Проблема затрагивает приложения, использующие упрощённый API (png_image_finish_read), и вызвана ошибкой в функции png_combine_row(). Уязвимость проявляется при использовании 8-битного RGBA-формата вывода (PNG_FORMAT_RGBA) для изображений с 16-битным представлением цвета на канал и чересстрочным кодированием (interlaced). Переполнение возникает из-за попытки записи данных с 16-битным представлением цвета в буфер, размер которого был вычислен из расчёта использования 8 бит на цветовой канал.

Вызвавший проблему код был добавлен в январе 2016 года в коммите "Simplified API: write-to-memory, overflow handling", в котором исправляли проблемы с переполнениями при обработке изображений. Все это время проблема оставалась незамеченной.

Остальные три уязвимости (CVE-2025-64505, CVE-2025-64506, CVE-2025-64720) приводят к чтению из области памяти вне границ буфера и могут использоваться для вызова аварийного завершения приложения или организации утечки остаточных данных из памяти процесса.

Статус устранения уязвимостей в дистрибутивах можно оценить на данных страницах (если страница недоступна, значит разработчики дистрибутива ещё не приступили к рассмотрению проблемы): Debian, Ubuntu, SUSE, RHEL, Arch, Fedora, FreeBSD.

  1. Главная ссылка к новости (https://www.openwall.com/lists...)
  2. OpenNews: Обновление libpng 1.6.27 с устранением уязвимости
  3. OpenNews: Приложения, использующие libpng, подвержены уязвимости
  4. OpenNews: В libpng устранена опасная уязвимость
  5. OpenNews: Релиз libpng 1.6.0 с поддержкой упрощённого API
  6. OpenNews: 14 уязвимостей в библиотеке libsoup, используемой в GNOME
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/64305-libpng
Ключевые слова: libpng
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (93) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 11:12, 22/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Обещали же в файрфоксе все эти парсеры в васм скомпилровать. RLBox.
     
     
  • 2.79, Аноним (-), 16:27, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • –4 +/
    > Обещали же в файрфоксе все эти парсеры в васм скомпилровать.

    Чтобы тормозило и жрало память еще и это? Файрфокс и так после открытия нескольких вкладок начинает дико якорить уже.

     
     
  • 3.111, Аноним (111), 01:51, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Да, тут писали. Вейланд так течёт, что там не только Фаерфокс, а даже курсор через некоторое время якорить начинает.
     
     
  • 4.132, Аноним (132), 18:21, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >Вейланд так течёт

    Опять ыксперды лгут.

     
  • 2.93, morphe (?), 19:59, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    RLBox сложнее

    Код сначала компилируют в WASM, а затем WASM превращают в C код с сохранением гарантий безопасности, проверок и изоляции WASM рантайма

     
     
  • 3.128, Смузихлеб забывший пароль (?), 14:06, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Васм в сишку не превращают ибо сие глупость. Вот наоборот - вполне

    > Механизм работы RLBox сводится к компиляции C/C++ кода изолируемой библиотеки
    > в низкоуровневый промежуточный код WebAssembly, который затем оформляется
    > в виде WebAssembly-модуля, полномочия которого задаются в привязке
    > только к этому модулю
    > Преобразование кода C/C++ в WebAssembly осуществляется при помощи wasi-sdk.
    > Для непосредственного выполнения WebAssembly-модуль компилируется в машинный код
    > при помощи компилятора Lucet и выполняется в отдельном "нанопроцессе",
    > изолированном от остальной памяти приложения.
    > Компилятор Lucet основан на том же коде, что и JIT-движок Cranelift,
    > применяемый в Firefox для выполнения WebAssembly.

    https://www.opennet.dev/opennews/art.shtml?num=52440

     
     
  • 4.139, morphe (?), 21:29, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > https://www.opennet.dev/opennews/art.shtml?num=52440

    Не используется для rlbox jit, у него есть несколько бекендов, и в лисе применяется бекенд wasm2c, который именно что компилирует wasm в C: https://rlbox.dev/chapters/tutorial/wasm-sandbox.html

     
     
  • 5.144, Смузихлеб забывший пароль (?), 07:07, 24/11/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    т.е они преобразуют Си в васм, потом преобразуют васм в Си и потом... потом компилируют ?)

    Хоспаде, как же хорошо, что свалил с лисы. У них столько всего недоделано или могло бы быть сделано, вместо этого - они, при сильно ограниченных ресурсах, занимаются "вот этим вот"

    Хотя, покопаться на досуге в сабже было бы интересно

     
     
  • 6.146, morphe (?), 10:56, 24/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > т.е они преобразуют Си в васм, потом преобразуют васм в Си и
    > потом... потом компилируют ?)

    И это получается намного надёжнее всех имеющихся санитайзеров, да.
    Сам такое применяю в Rust проекте использующем xmlsec. Производительность затрагивает незначительно, однако больше не нужно доверять коду этой библиотеки, который далеко не лучшего качества и плохо документирован

    После перевода в rlbox даже обнаружил что я неправильно понял работу пары методов и получал use after free, с которыми сишная версия чудесным образом продолжала работать, а rlbox ловил ошибку

     
  • 4.140, morphe (?), 21:32, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > при помощи компилятора Lucet и выполняется в отдельном "нанопроцессе",

    С момента публикации новости прошло 5 лет, никакой lucet в rlbox давно не применяется, да и вообще он мёртвый

    > Lucet has reached end-of-life, and maintence has ceased. All Lucet users should transition to Wasmtime.

     
  • 2.94, Аноним (-), 20:01, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Зачем кому-то переполнять чужой буфер? Вот в чем вопрос...
     

  • 1.6, Аноним (6), 11:41, 22/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –14 +/
    Эти ошибки - результат эры PC. До PC все писали на басике и паскале и не парились. Потом пришли ребята, которые сказали, надоело системые проги на асме катать. Давайте изобретем си. Вот и изобрели себе на голову. А писали бы на басике, проблем бы не знали.
     
     
  • 2.12, Аноним (12), 12:18, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    так современный аналог бейсика это питон/js
     
     
  • 3.165, Аноним (165), 01:00, 26/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    чувак, не позорился бы...
    JS -- не без изъянов, но прекрасный язык, писать на нём одно удовольствие.
    судя по твоему высеру, твой скудный ум не смог освоить JS.
     
  • 2.35, Аноним (35), 13:57, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Историческая безграмотность это настоящая беда современной молодежи!
    Керниган и Ритчи (K&R) опубликовали «Язык программирования Си» в 1978 году. Ни каких РС, бэйсиков и паскалей еще даже в проекте не было.
     
     
  • 3.43, Аноним (43), 14:28, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • +11 +/
    > Керниган и Ритчи (K&R) опубликовали «Язык программирования Си» в 1978 году. Ни каких РС, бэйсиков и паскалей еще даже в проекте не было.

    Тем временем в нашей вселенной: язык программирования Pascal был создан в 1970.

     
     
  • 4.68, Аноним (68), 15:40, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Про бейсик даже упоминать боязно, но всё же — 1964 год.
     
  • 3.102, 1 (??), 21:52, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    ну если под PC понимать IBM PC -- то это 1981 года, а если более широкое толкование

    The personal computer (PC) era began in the mid-1970s with the invention of the microprocessor, leading to the first commercially successful personal computers like the Altair 8800 in 1974. Mass production of pre-assembled PCs started in 1977 with the introduction of the Apple II, Tandy TRS-80, and Commodore PET. The industry then flourished in the 1980s with the launch of machines like the IBM PC and Apple Macintosh, making computers accessible to individuals and businesses.

     
  • 2.107, Аноним (107), 23:31, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Так разве проблема не возникнет и при написании на ассемблере? Так же возникнет.
    Проблему тут решит язык в котором работа к буфером возможна только по средствам
    API, который проверяет границы. На сколько я знаю только два языка такое могут
    и не поддерживают в чистом виде указатели.
     

  • 1.19, Аноним (-), 12:51, 22/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +8 +/
    Шикарная новость!

    С одной стороны ничего нового, типиkaл си код.

    Но один пикантный момент в новости упустили - этой dыpeни уже почти десять лет :)

    Была добавлена в январе 2016 в коммите Simplified API: write-to-memory, overflow handling [1], в котором исправляли ДРУГИЕ проблемы с переполнениями при обработке изображений.

    /* Now check for overflow of the image buffer calculation; this
    * limits the whole image size to 32 bits for API compatibility with
    * the current, 32-bit, PNG_IMAGE_BUFFER_SIZE macro.
    */
    Pathetic))

    И почти десять лет выполнения стороннего кода при обработке специально оформленных файлов в огромном количестве пакетов! Все это время проблема оставалась незамеченной. Тыщща глаз смотрела куда-то не туда.

    Добавил это в уточнение в новость, но не уверен что пропустят.
    Поэтому продублирую тут чтобы порадовать всех))

    [1] github.com/pnggroup/libpng/commit/175a126a1a9ecb8ffb26882f5fc0b509fecc656a

     
  • 1.22, Аноним (22), 13:04, 22/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Странная ошибка. Попытка заюзать такую в реале должна быть винда на экране: либо будет специально-скрафченный корявый ввод при просмотре 16-RGB, либо получится корявый вывод 8-RGBA. Ну или забыли только про это одно место, а вывод трансформируется где-то ещё (и тогда вопрос - а было ли переполнение)
     
     
  • 2.67, Анонимусс (-), 15:38, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > либо будет специально-скрафченный корявый ввод при просмотре 16-RGB,
    > либо получится корявый вывод 8-RGBA.

    А уже не важно что будет на экране - подумаешь, битое изображение - главное что сторонний код уже успеет выполниться.
    И выполнится он с правами процесса запустившего либу. Рута там надеюсь не будет, но прошерстить и отправить все что нужно куда нужно оно вполне сможет.

     
     
  • 3.121, Аноним (121), 06:39, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >сторонний код уже успеет выполниться.

    Ничего там не выполнится, просто данные запортятся.

     
     
  • 4.162, Аноним (162), 13:06, 25/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    там heap overflow, так что можно и выполнить, если точно знать, что там за билд и на какой архитектуре
     

  • 1.23, бсдшник (-), 13:12, 22/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кстати забавно, если открыть страничку FreeBSD из новости (vuxml.org/freebsd/pkg-png.html), то там есть очень классная табличка

    2015-11-15 libpng buffer overflow in png_set_PLTE
    2015-01-05 png -- heap overflow for 32-bit builds
    2012-04-08 png -- memory corruption/possible remote code execution
    2010-06-28 png -- libpng decompression buffer overflow
    2010-04-20 png -- libpng decompression denial of service
    2008-04-25 png -- unknown chunk processing uninitialized memory access
    2007-10-11 png -- multiple vulnerabilities
    2007-05-16 png -- DoS crash vulnerability
    2004-08-04 libpng stack-based buffer overflow and other code concerns
    2004-05-02 libpng denial-of-service

    Что какбЭ в полной мере характеризует качество кода этой либы и йазычка, на которой она написана.

     
     
  • 2.33, Аноним (33), 13:54, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Никак язык это не характеризует.
     
     
  • 3.45, Аноним (43), 14:32, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    В любой более-менее популярной софтине на Си постоянно находят десятки CVE из-за ошибок с памятью, что как бы намекает на качество языка.
     
     
  • 4.115, Аноним (115), 04:42, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Как наличие ошибок в коде влияет на качество языка? Где ты здесь нашел прямую зависимость?
     
     
  • 5.136, Аноним (132), 18:32, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >Как наличие ошибок в коде влияет на качество языка? Где ты здесь нашел прямую зависимость?

    Зависимость строго обратная: качество языка влияет на количество ошибок.

     
     
  • 6.161, Аноним (162), 13:05, 25/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Качество языка влияет прежде всего на объем написанного на нём полезного кода, и тут С лидирует. А если сравнивать не объем кода, а объем его использования, так вообще с огромным отрывом.

    Ни одного языка, способного на практике массово заменить С во всех областях его применения, за это время так и не появилось. Rust - единственный претендент.

     
  • 4.122, Аноним (122), 07:48, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    может не языка, а архитектуры неймана?
     
     
  • 5.127, Мемоним (?), 12:18, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Языка, слишком буквально реализующего архитектуру Неймана
     
  • 5.135, Аноним (132), 18:31, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Языка. Других архитектур мы как-то не наблюдаем.
     
     
  • 6.166, Соль земли2 (?), 11:17, 27/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Нормальный язык. Просто планка поднялась. А уязвимости можно и аппаратно блокировать. Так примерно и было раньше, но программистам свободы хотелось.
     
  • 4.156, Tron is Whistling (?), 10:16, 25/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Осталось только найти сходные по популярности софтины на других йезычках.
    И вот тут проблема. Их нет.
     
  • 3.52, Аноним (-), 14:49, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Никак язык это не характеризует.

    Ещё как! Идеальный инструмент для сокрытия бэкдоров. И, как показывает коммит, бэкдор из новости добавили, когда прятали предыдущий бэкдор. Цирк, да и только. А те, кто защищает этот макроассемблер - или сознательные саботажники, или полезные иди от ы.

     
     
  • 4.92, Советский инженер (ok), 19:44, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    зато компилируется быстро. что еще надо !?
     
     
  • 5.98, Аноним (132), 21:32, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Не надо на си наговаривать, компиляция на си прекрасно затягивается https://www.opennet.dev/opennews/art.shtml?num=56449 Опубликован набор патчей, ускоряющих сборку ядра Linux на 50-80%
     
  • 5.103, Аноним (103), 22:27, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    В расте и медленно компилироваться будет, и память жрать, и бэкдор из cargo прилетит. Если бы было по-другому, то закопали бы не просто язык, а его авторов живьём.
     
     
  • 6.116, Аноним (115), 04:44, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Забыл написать про человеческий фактор, что большинство растеров постоянно расчитывают на волшебный компилятор, который должен за них ошибки ловить, ибо своей головы, как правило, у растеров нет.
     
     
  • 7.123, Аноним (-), 08:08, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > большинство растеров постоянно расчитывают на волшебный компилятор, который должен за них ошибки ловить, ибо своей головы, как правило, у растеров нет.

    Почему вы пользуетесь транспортом - своих ног у вас нет?
    Почему вы пользуетесь вилкой и ложкой - у вас нет рук?
    А ногти как укорачиваете - зубами грызёте или используете ножницы/книпсеры?

    Может у растохейтеров и есть голова, но такое впечатление, что логике вас обучало стадо бабуинов.

     
  • 7.131, Аноним (-), 17:13, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > ибо своей головы, как правило, у растеров нет.

    Ну так выкинь компьютер и считай в уме.
    А тексты пиши ручками на бумажке, принтер "не нужон".
    Подозреваю что подобные в 80х так же бухтели "зачем вам СИ?! настоящий программист пишет на ассемблере".

     
     
  • 8.138, Советский инженер (ok), 21:00, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    в контексте бареметал 1108 мбеда я такое слышал и 2005 ... текст свёрнут, показать
     
  • 8.147, Дед100лет (?), 11:46, 24/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Насколько я помню, в начале тех самых 80х, когда я писал код для БЭСМ6, был сове... большой текст свёрнут, показать
     
  • 6.119, Аноним (119), 06:13, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > В расте и медленно компилироваться будет, и память жрать, и бэкдор из cargo прилетит.

    Ложь по каждому пункту.

    > Если бы было по-другому, то закопали бы не просто язык, а его авторов живьём.

    Уууу, какой ты грозный закапыватель.

     
  • 4.149, Bottle (?), 14:23, 24/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Самое смешное, что этот макроассемблер обладает неопределённым поведением, то есть он не является по-настоящему низкоуровневым. Никакое действие не гарантирует точный результат, в отличие от машинных кодов.
     
     
  • 5.157, Tron is Whistling (?), 10:17, 25/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ты будешь удивлён, но в "машинных кодах" предостаточно неопределённого поведения.
     
  • 2.87, Аноним (132), 17:09, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >https://repology.org/project/libpng/cves
    >Too many CVEs found for this project, limiting to latest 200.

    Так что список будет куда обширние.

     
  • 2.97, Аноним (97), 21:24, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    В других либах на Си такой фигни нет, просто libpng пишут индусы.
     
     
  • 3.99, Аноним (132), 21:33, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Главное в новости про libpng не вспоминать про xorg, в новости про xrog не вспоминать про линукс, и так далее.
     
  • 3.105, Аноним (-), 23:25, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > В других либах на Си такой фигни нет

    Ну да, ну да, "это просто неправильная либа попалась" (с)
    А потом куда не ткни - одни и те же дыpы)))

    И примера правильной никто упорно предоставить не хочет. Или не может?

     
  • 3.124, Аноним (-), 10:10, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Есть и массово. Даже на opennet большинство новостей о уязвимостях - проблемы с памятью связанные с си.

    Корпорации не просто так переходят массово на rust.

     
  • 2.117, Аноним (115), 04:46, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А ты не знал, что исправление одной ошибки может привести к другим ошибкам?
     

  • 1.49, Кошкажена (?), 14:42, 22/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    В разработке этой библиотеки используются статические анализаторы и санитайзеры?
     
     
  • 2.55, Анонимусс (-), 14:56, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > В разработке этой библиотеки используются статические анализаторы

    Используют.
    "A Coverity project for libpng is at scan.coverity.com/projects/4061. The project is set up to scan the head of each of the libpng10 through libpng17 branches" [1]
    И текущая libpng16 в него включена.
    Но что-то не сильно помогает)))

    > и санитайзеры

    Как минимум часть багов нашли с из помощь [2]. Но используются ли они на постоянку при разработке на офф сайте  и в README не сказано.
    Скорее всего нет, патамушта диды и так пишут код на отлично!

    [1] libpng.sourceforge.io
    [2] github.com/pnggroup/libpng/issues/275

     
     
  • 3.83, Аноним (132), 16:43, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >Но что-то не сильно помогает)))

    Я задавал вопрос, а как в сишке проверить отсутствие разыменноывания нулевого указателя. Мне дали аж целых два флага для gcc, и ни один из них не заработал.
    >Но используются ли они на постоянку при разработке на офф сайте  и в README не сказано.

    Если статический анализатор не включён в обязательные сборочные зависимости - значит не используют.

     
     
  • 4.88, Медведь (ok), 17:49, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Если статический анализатор не включён в обязательные сборочные зависимости - значит не используют.

    Если хлеб в магазине не прикручен скотчем к колбасе, бутерброд ты никогда не сделаешь. Инфа сотка!

     
     
  • 5.89, Аноним (132), 18:16, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ну вот покажите мне, где в libpng используется этот самый анализатор. И да, почему сишные проверки ломаются от рефакторинга?
     
  • 5.104, Аноним (-), 23:04, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> Если статический анализатор не включён в обязательные сборочные зависимости - значит не используют.
    > Если хлеб в магазине не прикручен скотчем к колбасе, бутерброд ты никогда не сделаешь.

    Отличная анал-огия! Почти такая же крутая как котенок с дверцей.

    Еще раз по буквам "если статический анализатор не включён в обязательные сборочные зависимости" значит:
    - его использование не обязательно и какой-то процент программеров просто не будет заморачиваться
    - каждый будет лепить свой анализатор с уникальными настройками
    - спрашивать "а проходить ли CI перед коммитов" думаю бесполезно))


     
  • 2.108, Медведь (ok), 23:37, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Очень непохоже, чтоб использовали. CppCheck нашел вот такой забавный код, к примеру (pngimage.c:787):



    static void
    display_cache_file(struct display *dp, const char *filename)
       /* Does the initial cache of the file. */
    {
       FILE *fp;
       int ret;

       dp->filename = filename;

       if (filename != NULL)
       {
          fp = fopen(filename, "rb");
          if (fp == NULL)
             display_log(dp, USER_ERROR, "open failed: %s", strerror(errno));
       }

       else
          fp = stdin;

       ret = buffer_from_file(&dp->original_file, fp);

       fclose(fp);

       if (ret != 0)
          display_log(dp, APP_ERROR, "read failed: %s", strerror(ret));
    }



    Тут сразу несколько явных глюков, имхо, и я в шоке от качества кода, будто школьник писал %)

     
     
  • 3.109, Аноним (109), 00:59, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > CppCheck нашел

    А что говорит? fclose(stdin)? В display_log там longjmp.

     
     
  • 4.114, Медведь (ok), 02:11, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Куда конкретно ткнул cppcheck, я честно говоря, пребывая в восторге от кода, не запомнил :)
    Я не рыл display_log, но подозревал нечто этакое, хотя такой способ аварийного выхода, мягко говоря, неочевиден, деятель хотя бы функцию назвал подобающе. Но да, fclose(stdin) -- отличный косяк! Да и засовывание filename в dp->filename вызывает вопросы...

    P.S. Да, ткнул вот сюда:



    else
          fp = stdin;

       ret = buffer_from_file(&dp->original_file, fp);

       fclose(fp);



     
     
  • 5.133, Аноним (132), 18:26, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >Куда конкретно ткнул cppcheck, я честно говоря, пребывая в восторге от кода, не запомнил :)

    Ну так ещё раз запусти
    >но подозревал нечто этакое, хотя такой способ аварийного выхода, мягко говоря, неочевиден

    Это логирование, как очевидно из названия
    >Но да, fclose(stdin) -- отличный косяк!

    В чём проблема?
    >Да и засовывание filename в dp->filename вызывает вопросы...

    А куда засовывать?

     
     
  • 6.152, Медведь (ok), 16:01, 24/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Это логирование, как очевидно из названия

    А вот хренушки там.

    > В чём проблема?

    Ну, погугли хотя бы, что ли.


     
     
  • 7.154, Аноним (132), 17:37, 24/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >Ну, погугли хотя бы, что ли.

    Что именно? Насколько мне известно, те же демоны спокойно закрывают свои потоки ввода-вывода, для того, чтобы не зависить от терминала.

     
     
  • 8.155, Медведь (ok), 19:25, 24/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    А это разве демон Тут как минимум нужна железная уверенность, что stdin не дерн... текст свёрнут, показать
     
  • 3.110, Аноним (132), 01:02, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Вы неправильно вставили ссылку, нужно и коммит и полный путь к файлу https git... большой текст свёрнут, показать
     
     
  • 4.112, Медведь (ok), 01:59, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Вы неправильно вставили ссылку, нужно и коммит и полный путь к файлу https://github.com/pnggroup/libpng/blob/1ebf432e85b53bf111a4...

    Это в contrib, не критично

    > Вам говорили, что 99.99% проектов его не используют, а вы не верили. Ну что, убедились?

    Безосновательное обобщение, пока что подтвержден 1 проект )

    > А вот и не факт. Вы в своё время усердно меня убеждали, что возможность разыменнования нулевого указателя - это хорошо, и что с этим ничего делать не надо.

    Всё понимаю, поздно, выходные, но это галлюцинации, я такого не говорил. И там далеко не только с нулевым FILE* проблема.

    > Писал настоящий сишник, сишнее не бывает.

    Не знал, что говорю с экспертом по сишникам )) А вдруг он поддельный?

     
     
  • 5.134, Аноним (132), 18:30, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >Безосновательное обобщение, пока что подтвержден 1 проект )

    Продолжайте наблюдение, будут дальнейшие подтверждения
    >И там далеко не только с нулевым FILE* проблема.

    Постойте, но ведь алгебраические типы же нинужны, ровно как и ненулевые указатели! И потом, в сишке же исключений нет, и если fread не спровоцирует UB, то всё будет работать.
    >А вдруг он поддельный?

    Любой, кто пишет на си - настоящий сишник. Только вот тех, кто пишет на си без багов как-то подозрительно мало.

     

  • 1.71, Аноним (132), 16:08, 22/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Дыроделы, ваше оправдание Почему заведомо уязвимый код скомпилировался Я конеч... большой текст свёрнут, показать
     
     
  • 2.85, Анонимусс (-), 16:47, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    А вы знаете сколько времени и денег потратили на эту верификацию Скорее всего н... большой текст свёрнут, показать
     
     
  • 3.86, Аноним (132), 16:55, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >При этом оценка доказательства аналогичного ядра по такой же методологии - 6-8 человеко-лет.

    А куда спешим? Выше приводили, небольшой срез из freebsd
    >2004-05-02

    Я думаю, что за более чем двадцать лет как-то бы уже успели. Особенно, если местные експерты бы вместо того, чтобы здесь строчить комметарии о ненужно раста взяли бы и все вместе принялись писать.

     
     
  • 4.91, Анонимусс (?), 19:00, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В libpng v1 6 37 около 20K строк кода Это больше чем в два раза чем SLOC в SE4L... большой текст свёрнут, показать
     
     
  • 5.95, Аноним (109), 20:49, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    wuffs png уже есть.
    https://habr.com/ru/articles/751462

    "Wuffs' assertion and bounds checking system is a proof checker"

     
  • 5.137, Кошкажена (?), 18:51, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > В libpng v1.6.37 около 20K строк кода. Это больше чем в два раза чем SLOC в SE4L.

    Зачем все верифицировать? Достаточно верифицировать алгоритм, думаю там сильно меньше кода. Хотя, конечно, времени тоже много займет.

     
     
  • 6.141, Аноним (-), 21:57, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А почему достаточно верифицировать алгоритм Разве где-то в алгоритме сказано чт... большой текст свёрнут, показать
     
     
  • 7.145, Кошкажена (?), 10:32, 24/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Да и не нужна такая надежность в прикладном софте.

    Ну да, именно поэтому в питон добавили hacl*.

     
     
  • 8.148, Аноним (-), 11:47, 24/11/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Вы реально сравниваете криптографию hacl с декодингом картиночек Ну тогда ... текст свёрнут, показать
     
     
  • 9.153, Кошкажена (?), 16:25, 24/11/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Криптография - не прикладной софт ... текст свёрнут, показать
     
  • 6.142, Аноним (132), 00:56, 24/11/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >Достаточно верифицировать алгоритм

    Разрешаю, приступай.
    >Зачем все верифицировать?

    Всё - это что? Какую именно часть можно не верифицировать?

     
  • 4.101, Аноним (132), 21:43, 22/11/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    А она там вообще хоть в каком-то виде есть Хотя-бы в виде сегодняшнего коммита ... большой текст свёрнут, показать
     
  • 2.118, Аноним (115), 04:49, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Компилятор не может знать что хочет сделать программист. С чего ты взял, что компилятор должен все это фильтровать?
     
     
  • 3.120, Аноним (-), 06:21, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Компилятор не может знать что хочет сделать программист.

    А зачем ты пользуешься таким глупым компилятором?
    Почему не взять тот, который хотя бы в 96% случаев понимает, чего хочет программист?

    > С чего ты взял, что компилятор должен все это фильтровать?

    С чего ты взял, что нет?

     
     
  • 4.126, Медведь (ok), 12:14, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Почему не взять тот, который хотя бы в 96% случаев понимает, чего хочет программист?

    Это какой же?

     
     
  • 5.150, 1 (??), 14:56, 24/11/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    copilot
     
     
  • 6.151, Медведь (ok), 15:49, 24/11/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Компилятор не может знать что хочет сделать программист
    > Почему не взять тот, который хотя бы в 96% случаев понимает, чего хочет программист?
    > Это какой же?
    > copilot

    Внимание, copilot внезапно стал компилятором. Ну-ну... Ещё откровения будут сегодня?

     
  • 4.160, Аноним (160), 13:04, 25/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    - Пап, а бывает такой компилятор, который хотя бы в 96% случаев понимает, чего хочет программист?
    - Нет это фантастика, сынок.
     
  • 2.159, Аноним (160), 13:00, 25/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Давайте подумаем, а как можно без ненжного раста превратить дырочные проекты в недырочные?

    Добавить опцию компилятора -fmisra ?

     

  • 1.76, Аноним (76), 16:19, 22/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А что в Андроиде?
     
  • 1.129, Аноним (-), 16:38, 23/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    github.com/pnggroup/libpng/security/advisories/GHSA-7wv6-48j4-hj3g
    > Attack Vector
    >   ...
    >   Application processes untrusted PNG files.

    В переводе на русский, сишные библиотеки не годятся для использования в реальном мире.

    github.com/pnggroup/libpng/issues/755
    > Fixed in PR #757 ...
    > Crediting Claude Sonnet 4.5 by Anthropic

    Язычок настолько простой и понятный, что даже лучшие из сишников не могут исправить ошибку без помощи ИИ.

     
     
  • 2.130, Аноним (-), 16:59, 23/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > не могут исправить ошибку без помощи ИИ.

    А сам ИИ обучили на аналогичном открытом овнокоде.
    И будет он бракоделить также как и диды.

     
     
  • 3.163, Аноним (160), 13:11, 25/11/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Да обучи его хоть на Расте... Если обучал не лично ты, то овнокодить он будет как нужно тому, кто обучал и для кого нужно дыры всталять.
     

  • 1.164, Аноним (-), 14:31, 25/11/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Уязвимость проявляется при использовании 8-битного RGBA-формата вывода (PNG_FORMAT_RGBA) для изображений с 16-битным представлением цвета на канал и чересстрочным кодированием (interlaced). Переполнение возникает из-за попытки записи данных с 16-битным представлением цвета в буфер, размер которого был вычислен из расчёта использования 8-бит на цветовой канал.

    В C с целыми неустранимая проблема, они де факто ведут себя как нетипизированные, потому что все приведения вставляются компилятором молча. И даже варнингов нельзя включить, чтобы неявные преобразования мозолили бы глаза кодеру.

    Чисто теоретически можно своих "целочисленных" типов наобъявлять на базе структур, и никаких неявных преобразований не будет, но тогда инфиксная запись арифметики станет недоступной.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру