19 октября 2026 года разработчики Emscripten выпустили версию 6.0.13 — набора инструментов, который превращает программы на C и C++ в WebAssembly для запуска в браузере и других средах. Обновление включает libpng 1.6.59 с исправлением уязвимости CVE-2026-46675, завершает переход на исполняемые файлы Windows и меняет правила совместимости для некоторых существующих проектов.

Emscripten получил libpng 1.6.59 с исправлением CVE-2026-46675
В поставке Emscripten обновили библиотеку libpng с версии 1.6.58 до 1.6.59. Она используется для чтения и обработки изображений PNG. Новая версия библиотеки устраняет уязвимость CVE-2026-46675, которую сопровождающие libpng оценили как проблему средней опасности.
Сбой связан с обработкой повреждённых служебных блоков PNG — zTXt, iTXt и iCCP, где могут храниться текстовые данные или цветовой профиль. При определённой последовательности вызовов libpng могла обратиться к уже освобождённому участку памяти. В неблагоприятных условиях это приводило к аварийному завершению приложения.
У этой ошибки есть существенное ограничение: она затрагивает программы, которые вызывают png_read_end() после чтения заголовков, ещё не начав чтение строк изображения. Обычные способы загрузки PNG, при которых изображение читается полностью, не подпадают под описанный сценарий. Подробности приведены в официальном бюллетене libpng.
Версия libpng 1.6.59 появилась ещё в конце сентября. Новость от 19 октября касается её включения в набор портируемых библиотек Emscripten. Исправление окажется в приложениях, заново собранных с обновлённым портом libpng; уже опубликованные WebAssembly-файлы сами по себе не изменяются.
Windows-инструменты Emscripten окончательно перешли на EXE
В Emscripten 6.0.13 удалили старые файлы запуска с расширениями .bat и .ps1. Прежде они использовались в Windows для вызова инструментов вроде emcc — компилятора, запускающего сборку C/C++ в WebAssembly.
Теперь проект опирается на собственные исполняемые загрузчики .exe. Они появились раньше и, по словам сопровождающих, уже несколько выпусков применялись без известных проблем. В версии 6.0.13 переход завершён удалением прежних сценариев запуска.
Наиболее заметное последствие касается систем сборки, где имена файлов указаны явно. Например, вызов emcc.bat в старом скрипте больше не найдёт этот файл в новой поставке; имя emcc.exe соответствует действующему способу запуска в Windows. Если система вызывает просто emcc, результат зависит от механизма поиска исполняемого файла в конкретной оболочке или инструменте сборки.
В обсуждении изменения № 27359 участники отдельно упоминали возможные несовместимости со сторонними сборочными сценариями и вопросы антивирусного распознавания новых .exe-загрузчиков. Подтверждённых массовых сбоев после релиза там не приводится.
Режим MEMORY64=2 объявлен устаревающим — его удаление ещё обсуждается
Разработчики пометили параметр -sMEMORY64=2 как устаревающий. Он позволяет собирать C/C++ с 64-битной моделью указателей, а затем преобразовывать обращения к памяти для выполнения в среде с 32-битной адресацией WebAssembly. Такой промежуточный режим помогает переносить код, зависящий от размеров 64-битных типов данных.
В Emscripten 6.0.13 параметр продолжает работать. При включённых предупреждениях -Wdeprecated компилятор сообщает о его устаревании. Срок окончательного удаления пока не установлен.
История оказалась сложнее первоначальных ожиданий авторов изменения. В обсуждении № 27952 участники нашли реальные случаи использования MEMORY64=2, включая QEMU, libffi, daScript и Flow PHP. Среди причин — необходимость сохранять 64-битное представление данных и одновременно поддерживать среды, где полноценный WebAssembly Memory64 ещё недоступен. В октябрьском обсуждении отдельно упоминалась совместимость с Safari.
Если промежуточный режим будет удалён, разработчикам некоторых библиотек могут понадобиться отдельные варианты сборки для 32- и 64-битной памяти. В проекте предусмотрен период предупреждений перед удалением возможностей, а сопровождающие допускают пересмотр решения с учётом использования режима в реальных приложениях.
Удаление FS.filesystems затрагивает нестандартный JavaScript-код
Ещё одно изменение связано с виртуальной файловой системой, через которую WebAssembly-программы работают с файлами. В версии 6.0.13 удалён недокументированный объект FS.filesystems.
Он позволял получить доступ к реализации файловой системы по имени, например через FS.filesystems['MEMFS']. В официальном changelog для такого случая указана прямая ссылка на MEMFS. Само удаление касается использования внутреннего объекта из JavaScript-кода, в том числе сторонних обвязок и нестандартных интеграций.
Это продолжение очистки старого интерфейса FS: в версии 6.0.11 разработчики уже удалили FS.findObject и объявили устаревающим FS.analyzePath. Изменения постепенно сокращают количество внутренних возможностей, на которые могли опираться проекты за пределами документированного API.
Состав Emscripten 6.0.13 и границы изменений
По сравнению с версией 6.0.12 новый релиз затрагивает сразу несколько независимых сценариев: обработку PNG через libpng, запуск компилятора в Windows, сборки с MEMORY64=2 и обращения к внутренностям JavaScript-файловой системы. Все они относятся к уже существующим приложениям и процессам сборки.
Есть и уточнение к журналу изменений. В текущей основной ветке changelog упоминается переход compiler-rt на LLVM 23.1.3, но 20 октября сопровождающий Emscripten уточнил в обсуждении, что этот переход не попал в версию 6.0.13 и запись должна относиться к следующему выпуску.
Таким образом, последствия версии 6.0.13 определяются тем, какие части Emscripten использует конкретный проект. Обновлённая libpng меняет состав будущих сборок с этой библиотекой, удалённые Windows-загрузчики влияют на старые сценарии запуска, а решение о дальнейшей судьбе MEMORY64=2 пока остаётся открытым.
Источники
- Emscripten — официальный журнал изменений
- Emscripten SDK — выпуск 6.0.13 от 19 октября 2026 года
- Emscripten — обновление порта libpng до 1.6.59
- libpng — бюллетень безопасности CVE-2026-46675
- Emscripten — удаление запускателей BAT и PowerShell
- Emscripten — обсуждение прекращения поддержки MEMORY64=2
- Emscripten — удаление FS.filesystems
- Emscripten — уточнение о выпуске compiler-rt