В корректирующем выпуске библиотеки libpng 1.6.51, применяемой в качестве прямой зависимости у около 600 пакетов в Ubuntu, устранены 4 уязвимости, одна из которых (CVE-2025-65018) приводит к записи за границу буфера. Потенциально данная уязвимость позволяет добиться выполнения своего кода при обработке специально оформленных файлов в формате PNG...Подробнее: https://www.opennet.me/opennews/art.shtml?num=64305
Обещали же в файрфоксе все эти парсеры в васм скомпилровать. RLBox.
> Обещали же в файрфоксе все эти парсеры в васм скомпилровать.Чтобы тормозило и жрало память еще и это? Файрфокс и так после открытия нескольких вкладок начинает дико якорить уже.
Да, тут писали. Вейланд так течёт, что там не только Фаерфокс, а даже курсор через некоторое время якорить начинает.
>Вейланд так течётОпять ыксперды лгут.
RLBox сложнееКод сначала компилируют в WASM, а затем WASM превращают в C код с сохранением гарантий безопасности, проверок и изоляции WASM рантайма
Васм в сишку не превращают ибо сие глупость. Вот наоборот - вполне> Механизм работы RLBox сводится к компиляции C/C++ кода изолируемой библиотеки
> в низкоуровневый промежуточный код WebAssembly, который затем оформляется
> в виде WebAssembly-модуля, полномочия которого задаются в привязке
> только к этому модулю
> Преобразование кода C/C++ в WebAssembly осуществляется при помощи wasi-sdk.
> Для непосредственного выполнения WebAssembly-модуль компилируется в машинный код
> при помощи компилятора Lucet и выполняется в отдельном "нанопроцессе",
> изолированном от остальной памяти приложения.
> Компилятор Lucet основан на том же коде, что и JIT-движок Cranelift,
> применяемый в Firefox для выполнения WebAssembly.
> https://www.opennet.me/opennews/art.shtml?num=52440Не используется для rlbox jit, у него есть несколько бекендов, и в лисе применяется бекенд wasm2c, который именно что компилирует wasm в C: https://rlbox.dev/chapters/tutorial/wasm-sandbox.html
т.е они преобразуют Си в васм, потом преобразуют васм в Си и потом... потом компилируют ?)Хоспаде, как же хорошо, что свалил с лисы. У них столько всего недоделано или могло бы быть сделано, вместо этого - они, при сильно ограниченных ресурсах, занимаются "вот этим вот"
Хотя, покопаться на досуге в сабже было бы интересно
> т.е они преобразуют Си в васм, потом преобразуют васм в Си и
> потом... потом компилируют ?)И это получается намного надёжнее всех имеющихся санитайзеров, да.
Сам такое применяю в Rust проекте использующем xmlsec. Производительность затрагивает незначительно, однако больше не нужно доверять коду этой библиотеки, который далеко не лучшего качества и плохо документированПосле перевода в rlbox даже обнаружил что я неправильно понял работу пары методов и получал use after free, с которыми сишная версия чудесным образом продолжала работать, а rlbox ловил ошибку
> при помощи компилятора Lucet и выполняется в отдельном "нанопроцессе",С момента публикации новости прошло 5 лет, никакой lucet в rlbox давно не применяется, да и вообще он мёртвый
> Lucet has reached end-of-life, and maintence has ceased. All Lucet users should transition to Wasmtime.
Зачем кому-то переполнять чужой буфер? Вот в чем вопрос...
Эти ошибки - результат эры PC. До PC все писали на басике и паскале и не парились. Потом пришли ребята, которые сказали, надоело системые проги на асме катать. Давайте изобретем си. Вот и изобрели себе на голову. А писали бы на басике, проблем бы не знали.
так современный аналог бейсика это питон/js
чувак, не позорился бы...
JS -- не без изъянов, но прекрасный язык, писать на нём одно удовольствие.
судя по твоему высеру, твой скудный ум не смог освоить JS.
Историческая безграмотность это настоящая беда современной молодежи!
Керниган и Ритчи (K&R) опубликовали «Язык программирования Си» в 1978 году. Ни каких РС, бэйсиков и паскалей еще даже в проекте не было.
> Керниган и Ритчи (K&R) опубликовали «Язык программирования Си» в 1978 году. Ни каких РС, бэйсиков и паскалей еще даже в проекте не было.Тем временем в нашей вселенной: язык программирования Pascal был создан в 1970.
Про бейсик даже упоминать боязно, но всё же — 1964 год.
ну если под 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.
Так разве проблема не возникнет и при написании на ассемблере? Так же возникнет.
Проблему тут решит язык в котором работа к буфером возможна только по средствам
API, который проверяет границы. На сколько я знаю только два языка такое могут
и не поддерживают в чистом виде указатели.
Шикарная новость!С одной стороны ничего нового, типи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
Странная ошибка. Попытка заюзать такую в реале должна быть винда на экране: либо будет специально-скрафченный корявый ввод при просмотре 16-RGB, либо получится корявый вывод 8-RGBA. Ну или забыли только про это одно место, а вывод трансформируется где-то ещё (и тогда вопрос - а было ли переполнение)
> либо будет специально-скрафченный корявый ввод при просмотре 16-RGB,
> либо получится корявый вывод 8-RGBA.А уже не важно что будет на экране - подумаешь, битое изображение - главное что сторонний код уже успеет выполниться.
И выполнится он с правами процесса запустившего либу. Рута там надеюсь не будет, но прошерстить и отправить все что нужно куда нужно оно вполне сможет.
>сторонний код уже успеет выполниться.Ничего там не выполнится, просто данные запортятся.
там heap overflow, так что можно и выполнить, если точно знать, что там за билд и на какой архитектуре
Кстати забавно, если открыть страничку 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Что какбЭ в полной мере характеризует качество кода этой либы и йазычка, на которой она написана.
Никак язык это не характеризует.
В любой более-менее популярной софтине на Си постоянно находят десятки CVE из-за ошибок с памятью, что как бы намекает на качество языка.
Как наличие ошибок в коде влияет на качество языка? Где ты здесь нашел прямую зависимость?
>Как наличие ошибок в коде влияет на качество языка? Где ты здесь нашел прямую зависимость?Зависимость строго обратная: качество языка влияет на количество ошибок.
Качество языка влияет прежде всего на объем написанного на нём полезного кода, и тут С лидирует. А если сравнивать не объем кода, а объем его использования, так вообще с огромным отрывом.Ни одного языка, способного на практике массово заменить С во всех областях его применения, за это время так и не появилось. Rust - единственный претендент.
может не языка, а архитектуры неймана?
Языка, слишком буквально реализующего архитектуру Неймана
Языка. Других архитектур мы как-то не наблюдаем.
Нормальный язык. Просто планка поднялась. А уязвимости можно и аппаратно блокировать. Так примерно и было раньше, но программистам свободы хотелось.
Осталось только найти сходные по популярности софтины на других йезычках.
И вот тут проблема. Их нет.
> Никак язык это не характеризует.Ещё как! Идеальный инструмент для сокрытия бэкдоров. И, как показывает коммит, бэкдор из новости добавили, когда прятали предыдущий бэкдор. Цирк, да и только. А те, кто защищает этот макроассемблер - или сознательные саботажники, или полезные иди от ы.
зато компилируется быстро. что еще надо !?
Не надо на си наговаривать, компиляция на си прекрасно затягивается https://www.opennet.me/opennews/art.shtml?num=56449 Опубликован набор патчей, ускоряющих сборку ядра Linux на 50-80%
В расте и медленно компилироваться будет, и память жрать, и бэкдор из cargo прилетит. Если бы было по-другому, то закопали бы не просто язык, а его авторов живьём.
Забыл написать про человеческий фактор, что большинство растеров постоянно расчитывают на волшебный компилятор, который должен за них ошибки ловить, ибо своей головы, как правило, у растеров нет.
> большинство растеров постоянно расчитывают на волшебный компилятор, который должен за них ошибки ловить, ибо своей головы, как правило, у растеров нет.Почему вы пользуетесь транспортом - своих ног у вас нет?
Почему вы пользуетесь вилкой и ложкой - у вас нет рук?
А ногти как укорачиваете - зубами грызёте или используете ножницы/книпсеры?Может у растохейтеров и есть голова, но такое впечатление, что логике вас обучало стадо бабуинов.
> ибо своей головы, как правило, у растеров нет.Ну так выкинь компьютер и считай в уме.
А тексты пиши ручками на бумажке, принтер "не нужон".
Подозреваю что подобные в 80х так же бухтели "зачем вам СИ?! настоящий программист пишет на ассемблере".
> Подозреваю что подобные в 80х так же бухтели "зачем вам СИ?! настоящий
> программист пишет на ассемблере".в контексте бареметал ємбеда я такое слышал и 2005
Насколько я помню, в начале тех самых 80х, когда я писал код для БЭСМ6, был совершенно другой контекст. Компьютеры считались большими числодробилками. Потому код писали или на макроассемблере, или на Фортране. Потом еще появился FOREX, который на самом деле был Fortran 77. Все остальное: Альфа, Алголы-Паскали и прочее - считались второстепенными и никто на них не обращал серьезное внимание. Системный код писался на макроассемблере, а прикладой код в основном писали сами пользователи - даже самый бородатый физик или инженер шел и учил Фортран, потом учился собирать колоду перфокарт, потом гонял своего Рунге-Кутта. Так что появление C на горизонте никого не впечатлило ни разу.Кстати, первый компилятор C для не-PDP и который мог выдавать что-то, что после дизассемблирования не вызывало тошноты, был TopSpeed C. А к тому моменту поезд давно ушел и бухтеть было уже некому.
Вот переход с FoxPro и Clarion на SQL - вот тут да, народ по курилкам страдал и возмущался. Типа "это же лишняя прослойка! будет медленно!", или "как я буду чинить сломанную базу? кто там разберет, что и как оно пишет!" (тогда было модно выделять целый диск под базу и файлового доступа просто не было). Очень похоже на битву йокодзун Rust vs С++
> В расте и медленно компилироваться будет, и память жрать, и бэкдор из cargo прилетит.Ложь по каждому пункту.
> Если бы было по-другому, то закопали бы не просто язык, а его авторов живьём.
Уууу, какой ты грозный закапыватель.
Самое смешное, что этот макроассемблер обладает неопределённым поведением, то есть он не является по-настоящему низкоуровневым. Никакое действие не гарантирует точный результат, в отличие от машинных кодов.
Ты будешь удивлён, но в "машинных кодах" предостаточно неопределённого поведения.
>https://repology.org/project/libpng/cves
>Too many CVEs found for this project, limiting to latest 200.Так что список будет куда обширние.
В других либах на Си такой фигни нет, просто libpng пишут индусы.
Главное в новости про libpng не вспоминать про xorg, в новости про xrog не вспоминать про линукс, и так далее.
> В других либах на Си такой фигни нетНу да, ну да, "это просто неправильная либа попалась" (с)
А потом куда не ткни - одни и те же дыpы)))И примера правильной никто упорно предоставить не хочет. Или не может?
Есть и массово. Даже на opennet большинство новостей о уязвимостях - проблемы с памятью связанные с си.Корпорации не просто так переходят массово на rust.
А ты не знал, что исправление одной ошибки может привести к другим ошибкам?
В разработке этой библиотеки используются статические анализаторы и санитайзеры?
> В разработке этой библиотеки используются статические анализаторыИспользуют.
"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
>Но что-то не сильно помогает)))Я задавал вопрос, а как в сишке проверить отсутствие разыменноывания нулевого указателя. Мне дали аж целых два флага для gcc, и ни один из них не заработал.
>Но используются ли они на постоянку при разработке на офф сайте и в README не сказано.Если статический анализатор не включён в обязательные сборочные зависимости - значит не используют.
> Если статический анализатор не включён в обязательные сборочные зависимости - значит не используют.Если хлеб в магазине не прикручен скотчем к колбасе, бутерброд ты никогда не сделаешь. Инфа сотка!
Ну вот покажите мне, где в libpng используется этот самый анализатор. И да, почему сишные проверки ломаются от рефакторинга?
>> Если статический анализатор не включён в обязательные сборочные зависимости - значит не используют.
> Если хлеб в магазине не прикручен скотчем к колбасе, бутерброд ты никогда не сделаешь.Отличная анал-огия! Почти такая же крутая как котенок с дверцей.
Еще раз по буквам "если статический анализатор не включён в обязательные сборочные зависимости" значит:
- его использование не обязательно и какой-то процент программеров просто не будет заморачиваться
- каждый будет лепить свой анализатор с уникальными настройками
- спрашивать "а проходить ли CI перед коммитов" думаю бесполезно))
Очень непохоже, чтоб использовали. 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));
}
Тут сразу несколько явных глюков, имхо, и я в шоке от качества кода, будто школьник писал %)
> CppCheck нашелА что говорит? fclose(stdin)? В display_log там longjmp.
Куда конкретно ткнул cppcheck, я честно говоря, пребывая в восторге от кода, не запомнил :)
Я не рыл display_log, но подозревал нечто этакое, хотя такой способ аварийного выхода, мягко говоря, неочевиден, деятель хотя бы функцию назвал подобающе. Но да, fclose(stdin) -- отличный косяк! Да и засовывание filename в dp->filename вызывает вопросы...P.S. Да, ткнул вот сюда:
else
fp = stdin;ret = buffer_from_file(&dp->original_file, fp);
fclose(fp);
>Куда конкретно ткнул cppcheck, я честно говоря, пребывая в восторге от кода, не запомнил :)Ну так ещё раз запусти
>но подозревал нечто этакое, хотя такой способ аварийного выхода, мягко говоря, неочевиденЭто логирование, как очевидно из названия
>Но да, fclose(stdin) -- отличный косяк!В чём проблема?
>Да и засовывание filename в dp->filename вызывает вопросы...А куда засовывать?
> Это логирование, как очевидно из названияА вот хренушки там.
> В чём проблема?
Ну, погугли хотя бы, что ли.
>Ну, погугли хотя бы, что ли.Что именно? Насколько мне известно, те же демоны спокойно закрывают свои потоки ввода-вывода, для того, чтобы не зависить от терминала.
>>Ну, погугли хотя бы, что ли.
> Что именно? Насколько мне известно, те же демоны спокойно закрывают свои потоки
> ввода-вывода, для того, чтобы не зависить от терминала.А это разве демон? Тут как минимум нужна железная уверенность, что stdin не дернется нигде и никем после этого.
>CppCheck нашел вот такой забавный код, к примеру (pngimage.c:787):Вы неправильно вставили ссылку, нужно и коммит и полный путь к файлу https://github.com/pnggroup/libpng/blob/1ebf432e85b53bf111a4...
>Очень непохоже, чтоб использовали.Вам говорили, что 99.99% проектов его не используют, а вы не верили. Ну что, убедились?
>CppCheck нашел вот такой забавный кодЗабавный чем? Во-первых у сишников абсолютно весь код забавный, а во-вторых даже документация не позволяет определить, что будет, если функции передать null.
>Тут сразу несколько явных глюковА вот и не факт. Вы в своё время усердно меня убеждали, что возможность разыменнования нулевого указателя - это хорошо, и что с этим ничего делать не надо.
>и я в шоке от качества кода, будто школьник писалПисал настоящий сишник, сишнее не бывает. И в отличии от вас, его код не просто попал в репозиторий но ещё и используется.
И да, вы уже отправили патч?
> Вы неправильно вставили ссылку, нужно и коммит и полный путь к файлу https://github.com/pnggroup/libpng/blob/1ebf432e85b53bf111a4...Это в contrib, не критично
> Вам говорили, что 99.99% проектов его не используют, а вы не верили. Ну что, убедились?
Безосновательное обобщение, пока что подтвержден 1 проект )
> А вот и не факт. Вы в своё время усердно меня убеждали, что возможность разыменнования нулевого указателя - это хорошо, и что с этим ничего делать не надо.
Всё понимаю, поздно, выходные, но это галлюцинации, я такого не говорил. И там далеко не только с нулевым FILE* проблема.
> Писал настоящий сишник, сишнее не бывает.
Не знал, что говорю с экспертом по сишникам )) А вдруг он поддельный?
>Безосновательное обобщение, пока что подтвержден 1 проект )Продолжайте наблюдение, будут дальнейшие подтверждения
>И там далеко не только с нулевым FILE* проблема.Постойте, но ведь алгебраические типы же нинужны, ровно как и ненулевые указатели! И потом, в сишке же исключений нет, и если fread не спровоцирует UB, то всё будет работать.
>А вдруг он поддельный?Любой, кто пишет на си - настоящий сишник. Только вот тех, кто пишет на си без багов как-то подозрительно мало.
Дыроделы, ваше оправдание? Почему заведомо уязвимый код скомпилировался? Я конечно понимаю, что раст ненужон и всецело это поддерживаю, но почему это вы до сих пор, за более чем пятьдесят лет до сих пор не ввели нормальную проверку исходников во все свои дырочные проекты? Давайте подумаем, а как можно без ненжного раста превратить дырочные проекты в недырочные?
>В 2006 году началась разработка микроядра третьего поколения, получившего название «seL4»
>Верификация выполнялась с помощью языка Haskellhttps://ru.wikipedia.org/wiki/L4_(%D0%BC%D0...)
Вы представляете, верификацию можно было делать ещё до появления ненужнораста! Ну что, дыркоделы, поднимайте руки, кто из вас может написать верификацию? Кто из вас знает хаскель, окамл, или любой другой пригодный для цели верификации язык?
> Вы представляете, верификацию можно было делать ещё до появления ненужнораста!А вы знаете сколько времени и денег потратили на эту верификацию?
Скорее всего нет, раз пишите такое.Ядро L4 это 8,700 строк C и 600 строк ассемблера.
В статье "seL4: Formal Verification of an OS Kernel" есть детали как проходила верификация.
Она состояла из трех фаз:
1) упрощенная версия ядра дизайнилась и имплементилась на Хаскеле + писался фреймворк для верификации
2) написали abstract spec
3) имплементировали все ядро и провалидировалиОбщий размер пруфа - 200,000 строк Isabelle script - примерно в 20 раз больше чем кода на дыpяxe и асме.
Теперь по времени
- написание abstract заняло примерно 4 человеко-месяца
- два человеко-года ушло на весь Haskell прототип (design, documentation, coding, testing)
- на executable spec потратили всего лишь 2 человеко-месяца
- начальная трансляция в С заняла 3 недели, а полная C implementation - 2 человеко-месяца
- общие затраты на seL4-specific proof 11 человеко-летПри этом в процессе разработки и верификации было внесено около 300 изменений в abstract spec и 200 в executable spec. Около 50% изменений были из-за багов в алгоритмах или архитектуре.
При этом оценка доказательства аналогичного ядра по такой же методологии - 6-8 человеко-лет.
> Кто из вас знает хаскель, окамл, или любой другой пригодный для цели верификации язык?
А кто из вас умеет проводить формальную верификацию?))
Вы даже правильно посчитать размер буфера, чтобы за границы не выходить, не в состоянии.
----------------------------------------------------------
Источник sigops.org/s/conferences/sosp/2009/papers/klein-sosp09.pdf
>При этом оценка доказательства аналогичного ядра по такой же методологии - 6-8 человеко-лет.А куда спешим? Выше приводили, небольшой срез из freebsd
>2004-05-02Я думаю, что за более чем двадцать лет как-то бы уже успели. Особенно, если местные експерты бы вместо того, чтобы здесь строчить комметарии о ненужно раста взяли бы и все вместе принялись писать.
> А куда спешим?В libpng v1.6.37 около 20K строк кода. Это больше чем в два раза чем SLOC в SE4L.
Даже если предположить, что сложность верификации линейная (а это вот совсем не так в общем случае), то это 22+ человеко-года верификации)) Это раз.А два - сомневаюсь что в опенсорсе достаточно компетентных людей, чтобы ее провести.
Это довольно редкие специалисты и чаще всего они заняты чем-то более полезным.Три - в статье выше приводились стоимость Common Criteria EAL6 certification - $10k за сточку кода, это примерно 200 лямов за декодинг только PNG картинок, для "6omжей из сообщества" неподъемная цена. И это по расценкам 2009го года!
Поэтому мой вердикт - "без шансов"))
> Особенно, если местные експерты бы вместо того, чтобы здесь строчить
> комметарии о ненужно раста взяли бы и все вместе принялись писать.Редкий местный кексперт даже на си писать может.
Основа местной тусовки это всякие oдmинчeги-башпортянщики.
wuffs png уже есть.
https://habr.com/ru/articles/751462"Wuffs' assertion and bounds checking system is a proof checker"
> В libpng v1.6.37 около 20K строк кода. Это больше чем в два раза чем SLOC в SE4L.Зачем все верифицировать? Достаточно верифицировать алгоритм, думаю там сильно меньше кода. Хотя, конечно, времени тоже много займет.
> Достаточно верифицировать алгоритмА почему достаточно верифицировать алгоритм?
Разве где-то в алгоритме сказано что можно писать за границы буфера?))
Нет, это так сказать "маленький нюанс" реализации.> Хотя, конечно, времени тоже много займет.
Фиг с ним с временем. Требования к надежности seL4 на порядкИ выше чем для декодера png.
Да и не нужна такая надежность в прикладном софте. Если бы либа хотя бы падала при открытии "специально оформленных файлов" то этого уже было бы достаточно.
Во-первых это бы сразу заметили - сложно не заметить что софтина упала))
Во-вторых это бы быстро исправили, потому что нормальная проверка что-то в логи бы записала (а не "приложение Х обратилось по адресу 0xC492B1" и было убито). И такого лога и возможно образце файла было бы более чем достаточно.
> Да и не нужна такая надежность в прикладном софте.Ну да, именно поэтому в питон добавили hacl*.
Вы реально сравниваете криптографию hacl с декодингом картиночек?))
Ну... тогда как бы вопросов больше нет.ЗЫ: забавно что работы над этим hacl были начаты после очередной уязвимости в SHA-3
opennet.ru/opennews/art.shtml?num=57953
> Вы реально сравниваете криптографию hacl с декодингом картиночек?))
> Ну... тогда как бы вопросов больше нет.Криптография - не прикладной софт?
>Достаточно верифицировать алгоритмРазрешаю, приступай.
>Зачем все верифицировать?Всё - это что? Какую именно часть можно не верифицировать?
>Даже если предположить, что сложность верификации линейная (а это вот совсем не так в общем случае), то это 22+ человеко-года верификации))А она там вообще хоть в каком-то виде есть? Хотя-бы в виде сегодняшнего коммита с самым-самым началом?
>А два - сомневаюсь что в опенсорсе достаточно компетентных людей, чтобы ее провести.Вопрос не в компетентости, этому можно научится, вопрос в желании. Дыряшечники в первую очередь не желают.
>$10k за сточку кода, это примерно 200 лямов за декодинг только PNG картинокЭто если нанимать человека за зарплату. А если борцуны с растом соберутся хотя-бы со всего рунета, то могут написать это совершенно бесплатно. Вот задонатить аналогичную сумму точно не смогут, а написать - запросто.
>Редкий местный кексперт даже на си писать может.Как минимум ProfessorNavigator скидывал свою поделку на крестах. И полезным делом бы занялся, и дурацких комментов тут меньше бы писал.
Компилятор не может знать что хочет сделать программист. С чего ты взял, что компилятор должен все это фильтровать?
> Компилятор не может знать что хочет сделать программист.А зачем ты пользуешься таким глупым компилятором?
Почему не взять тот, который хотя бы в 96% случаев понимает, чего хочет программист?> С чего ты взял, что компилятор должен все это фильтровать?
С чего ты взял, что нет?
> Почему не взять тот, который хотя бы в 96% случаев понимает, чего хочет программист?Это какой же?
copilot
> Компилятор не может знать что хочет сделать программист
> Почему не взять тот, который хотя бы в 96% случаев понимает, чего хочет программист?
> Это какой же?
> copilotВнимание, copilot внезапно стал компилятором. Ну-ну... Ещё откровения будут сегодня?
- Пап, а бывает такой компилятор, который хотя бы в 96% случаев понимает, чего хочет программист?
- Нет это фантастика, сынок.
> Давайте подумаем, а как можно без ненжного раста превратить дырочные проекты в недырочные?Добавить опцию компилятора -fmisra ?
А что в Андроиде?
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Язычок настолько простой и понятный, что даже лучшие из сишников не могут исправить ошибку без помощи ИИ.
> не могут исправить ошибку без помощи ИИ.А сам ИИ обучили на аналогичном открытом овнокоде.
И будет он бракоделить также как и диды.
Да обучи его хоть на Расте... Если обучал не лично ты, то овнокодить он будет как нужно тому, кто обучал и для кого нужно дыры всталять.
> Уязвимость проявляется при использовании 8-битного RGBA-формата вывода (PNG_FORMAT_RGBA) для изображений с 16-битным представлением цвета на канал и чересстрочным кодированием (interlaced). Переполнение возникает из-за попытки записи данных с 16-битным представлением цвета в буфер, размер которого был вычислен из расчёта использования 8-бит на цветовой канал.В C с целыми неустранимая проблема, они де факто ведут себя как нетипизированные, потому что все приведения вставляются компилятором молча. И даже варнингов нельзя включить, чтобы неявные преобразования мозолили бы глаза кодеру.
Чисто теоретически можно своих "целочисленных" типов наобъявлять на базе структур, и никаких неявных преобразований не будет, но тогда инфиксная запись арифметики станет недоступной.