В библиотеке libsoup, развиваемой проектом GNOME, выявлено 14 уязвимостей. Libsoup предоставляет реализации клиента и сервера HTTP, использующие GObjects для интеграции с приложениями GNOME. Библиотека применяется в GNOME Shell, браузере Epiphany (GNOME Web), просмотрщике изображений Shotwell, в GStreamer-плагине souphttpsrc и в приложениях, использующих libwebkit2gtk. Ранее библиотека libsoup применялась в NetworkManager, который начиная с выпуска 1.8 был переведён на libcurl...Подробнее: https://www.opennet.me/opennews/art.shtml?num=63112
Ой, опять Си-профи имея кучу линтеков и чекеров не смогли отловить типы ошибок известные ещё до рождения Си. А потом ещё удивляются почему кто-то Rust и Go форсит.
Все удивляются почему форсят. Но ничего на этих языках не делают.
Когда человек утверждает, что на Rust ничего не пишут, значит он или вообще не шарит и живёт в 2010 или просто низкосортный тролль. В обоих случаях нет смысла спорить.
Те, кто пишет такие библиотеки не использует: анализаторы и отладчики, потому что это слишком современно)
гугл использует "анализаторы и отладчики" в своих си/плюсовых проектах и говорит что помогает слабо (в уменьшении генерации ошибок работы с памятью). А вот написание на расте помогает кардинально.
И что тут такого, обернули двойным try catch, чтобы даже мышь не пробежала и норм.
Это те модные языки которые без подключения к инету хэлловорлд кое как могут собрать?)Здесь же всё просто: ошибки нашли - ошибки пофиксили.
То что их не нашли раньше - исключительно потому что не проявлялось, а значит и не мешало.
Какое убожество. Сколько можно делать так много ошибок в базе. Вся суть сишки
У тебя завышенное чувство вины? Что тебе эти ошибки?
Угроза в безопасности как юзеру. Или ща скажете что нефиг юзать Гном? Ну так далеко не только в нем это ископаемое используют.
Теории заговора рассказываете. Нет никакой угрозы и уж тем более реализации.
> Вся суть сишкиНедавно был пост про Erlang - там тоже до CVE докодились, так что дело не в языке, а в общем снижении уровня разработчиков. Просто в Си это сразу вылезает наружу - если человек пишет левой ногой, то начинает ляпать ошибки при работе с памятью. А какой-нибудь безопасный язык с защитой от дурака не даёт ему наляпать глупых ошибок, но так так он продолжает писать левой ногой или просто у него низкая квалификация, то логические ошибки никуда не деваются, просто их сложнее становится обнаружить.
Сишка - язычок стандарт по undefined behavior. И никакими сравнениями ты её не улучшишь.
Си - один из самых изученных, стандартизированных и предсказуемых языков. По коду на Си даже примерно понятно, как это будет выглядеть в ассемблере, так что не надо "ля-ля".
> так что не надо "ля-ля"Как же так вышло, что на самом предсказуемом в мире язычке - Сишке, очень очень много CVE. Предсказуемый язычок не может работать с памятью так, как работает Сишка.
Это одна из главных фич Си - он не "заметает ошибки под ковёр", Си - это открытая система, а не чёрный ящик, поэтому так много CVE - ошибки всегда на поверхности и их сразу видно. Это метод диагностики - если в коде много ошибок при работе с памятью, значит это плохо написанный код, в нём скрыты и другие, менее очевидные ошибки. А если язык половину ошибок за горе-программиста исправил, то хрен его знает, что он там ещё наговнокодил...
> Си - это открытая системаСи - это формальный язык программирования, но почему-то сишникам на это плевать.
> Предсказуемый язычок не может работать с памятью так, как работает Сишка.так не язык работает с памятью, а человек, язык тебе дает возможность что угодно делать с этой памятью. Сам человек ставит границы массиву и сам же он выходит за его границы, в чем проблема языка? в том, что он не бьет человека по рукам? А бьет русский язык по морде за "мат"-ы? И "блаблаблабла" не запрещает говорить.
Получается, в мире нет ни одного программиста сишника, который пишет код без CVE. Неделю назад была новость, даже перловый дед добавил в сишке CVE. Получается, этот язык настолько совершенный, что для него нет качественных программистов!
В мире нет ни одного программиста, не совершающего ошибок в программах. Благодаря высокой открытости Си ошибки обнаруживаются и исправляются. А в каком-нибудь другом языке с "защитой от дурака" ошибки могут быть замаскированы и их сложно будет найти.
Оптимизирующие компиляторы - первый враг совершенного языка! (ц)
Ошибки use-after-free и выход за пределы буфера никак не могут быть замаскированы под что-то другое, это всё натягивание совы на глобус.
> В мире нет ни одного программиста, не совершающего ошибок в программах. Благодаря высокой открытости Си ошибки обнаруживаются и исправляются. А в каком-нибудь другом языке с "защитой от дурака" ошибки могут быть замаскированы и их сложно будет найти.Что за бредовая логика? В других языках ошибки сложно найти потому что их там мало. В Си ошибки обнаруживаются потому что их там over дох*я.
> В Си ошибки обнаруживаются потому что их там over дох*я.Не в обиду, вам надо корректно излагать мысль. Не "В Си", а "В программах написанных на языке Си", повторяется история с "В Карамель доказывается".
> Неполным предложением является предложение, в котором отсутствуют формально необходимые главные или второстепенные чл*ны предложения, значение которых ясно из контекста или ситуации.ru.wikipedia.org/wiki/Неполные_предложения
=========
Объясни предложения: "Что за бредовая логика? В других языках ошибки сложно найти потому что их там мало. В Си ошибки обнаруживаются потому что их там over дох*я."
GPT-4o mini:
В этих предложениях обсуждается логика и особенности работы с ошибками в разных языках программирования, в частности, в языке Си.
"Что за бредовая логика?" - Это выражение недовольства или удивления по поводу какой-то логики или аргументации, которая кажется нелепой или неуместной.
"В других языках ошибки сложно найти потому что их там мало." - Здесь говорится о том, что в некоторых языках программирования (например, Python, Java) количество ошибок, которые могут возникнуть, меньше, и поэтому их легче обнаружить. Это может быть связано с тем, что эти языки имеют более строгую типизацию или более развитые средства отладки.
"В Си ошибки обнаруживаются потому что их там over дох*я." - В этом предложении утверждается, что в языке Си количество ошибок (или потенциальных проблем) значительно больше, и поэтому их легче обнаружить. Использование слова "over дох*я" подчеркивает, что ошибок действительно много, что может быть связано с особенностями языка, такими как управление памятью, указатели и низкоуровневое программирование.
В целом, автор выражает мнение о том, что в языке Си больше возможностей для возникновения ошибок, и это делает их более заметными по сравнению с другими языками, где ошибок меньше.
> В этом предложении утверждается, что в языке Си количество ошибок (или потенциальных проблем) значительно большеАга именно, в языке Си много ошибок, не в программе на языке Си, а в языке Си, и чатгпт повторил именно ваши же слова :)
> или более развитые средства отладки.
он еще тонко троллит :)
этот чатгпт вам ровно такой же гамнокод будет генерировать, который человек и писал.
А ошибок там мало, потому что кода на этих языках на копейки, и в основном хеллоуворлды. Львиную долю ошибок просто даже и не искали - не надо никому.
> Получается, в мире нет ни одного программиста сишника, который пишет код без CVE.То, что нет такого программиста, не говорит о невозможности писать код на Си без CVE. А речь же о том, что во всех этих CVE виноват Си, что он неизбежно ведет к CVE как бы не писал бы программист, что в корне НЕВЕРНО!
> Получается, этот язык настолько совершенный, что для него нет качественных программистов!
Так и есть, и совершенный язык - требует совершенства.
пс: Ядерной бомбой можно прикуривать сигарету. (ц)
>То, что нет такого программиста, не говорит о невозможности писать код на Си без CVE. А речь же о том, что во всех этих CVE виноват Си, что он неизбежно ведет к CVE как бы не писал бы программист, что в корне НЕВЕРНО!Да, неверно. Так никто и не спорит. Это просто во всём мире сишники некачественные, вот в чём проблема.
> Это просто во всём мире сишники некачественные, вот в чём проблема.Все зависит от требований качества к продукту и его контроля, а тут вступает в игру стандарты качества и соответствие им, процедуры верификации и валидации и т.д. (со всякими формальными доказательствами)
Не только сишники, это всеобщая проблема - бурное развитие информационных технологий позволило человечеству "расслабиться", в результате в 21 веке просело образование и как результат упал уровень специалистов во всех областях. Боюсь представить, что будет с поколением ChatGPT...
Хорошо было в двадцатом веке: ошибки ещё не изобрели и потому весь софт был без них и работал как часы.
> Хорошо было в двадцатом веке: ошибки ещё не изобрелиОшибки были и прекрасно понимали цену (высокая) за эти ошибки. А щас "хЪяк, хЪяк и в продакшен", "континиус деливери".
> Боюсь представить, что будет с поколением ChatGPT...Ну кто там уже заявлял, что программисты уже не нужны, делаем вывод о масштабе целенаправленном уничтожении области.
>Сам человек ставит границы массиву и сам же он выходит за его границы, в чем проблема языкаПроблемы языка как собственно языка — нет («ну вот такой он»), а языка как технологии («инструмента», если угодно) есть: необходимость вручную управлять памятью а) накладывает дополнительную нагрузку на разработчика б) добавляет возможностей ошибиться. Так как разработчики (пока что ещё) люди, они БУДУТ ошибаться (мантры «настоящие программисты с памятью не ошибаются» оставим, от них уже даже местные сишники отползают к «нашли и поправили» и «а ты попробуй использовать эту уязвимость»), и УЖЕ ошибаются и ошибались — по одним и тем же граблям прыжки идут уже пятьдесят лет. Это не значит, что Си плохой (спичками можно дом спалить — плохи ли спички?), но и не значит, что менять ничего не надо и Си достаточно всем и для всего.
Думайте.
> необходимость вручную управлять памятьюа на кого вы хотите спихнуть эту работу? на другого программиста?
> накладывает дополнительную нагрузку на разработчика
за меня приготавливаются и за меня "кушаются" - Ага, как в известном мультике :) Короче несерьезное рассуждение, из серии - "а я на марсе хочу гулять без скафандра" (ц).
> добавляет возможностей ошибиться
"Почему в природе растут ядовитые грибы? я же могу отравиться." (ц)
> Так как разработчики (пока что ещё) люди, они БУДУТ ошибаться
Ну а почему тогда не относится к программированию как к саперному делу? Саперы тоже ошибаются и платят за это свою цену.
Человек ошибается, ошибки будут, и почему-то во всем виноваты область (предмет) где допущена ошибка. Это что за логика такая?
Мин быть не должно, чтобы саперы не ошибались? Или все мины должны быть учебными, чтобы цена за ошибку была - "подумаешь, ошибка, все ошибаются".
> по одним и тем же граблям прыжки идут уже пятьдесят лет
Если мины на поле расставлены по учебнику, то каждый "не сапер" там будет подрываться. Аналогия с грибами точно такая же.
> но и не значит, что менять ничего не надо и Си достаточно всем и для всего.
Ну давайте, что меняем в первую очередь - пример в студию. Чтобы компилятор за вас проверял выходы за границы массивов? Это называется - меняем язык?
> Думайте.
Параллельно полезно жевать.
>а на кого вы хотите спихнуть эту работу? на другого программиста?Почему на программиста? На машину само собой. Остальное даже комментировать не хочу: мины, сапёр, грибы, скафандр… Какая-то идиотия в стиле «Зачем нам провода изолировать? Кто не дурак, тот за них не возьмётся, а кто взялся того не жалко».
> Почему на программиста? На машину само собой.Ну машина вам говорит, у вас есть 4ГБ памяти и вы за ее пределы не выйдите, что дальше?
> Остальное даже комментировать не хочу: мины, сапёр, грибы, скафандр…
Ясно.
> Какая-то идиотия в стиле «Зачем нам провода изолировать? Кто не дурак, тот за них не возьмётся, а кто взялся того не жалко».
//ru.wikipedia.org/wiki/Линия_электропередачи
>Ну машина вам говорит, у вас есть 4ГБ памяти и вы за ее пределы не выйдите, что дальше?Норм вопрос, продолжение номера про заминированные грибы в скафандрах, я так понимаю. Дальше используется доступная в пределах этих 4 Гб память, с той разницей, что пиша на Си выделять/освобождать её нужно вручную с возможностью, например, забыть это сделать, в других языках будет по-другому, компилятор или рантам сделают эту работу за программиста. Это понятно? Или надо на палочках и верёвочках объяснять? Мина, скафандр, гриб, гриб, приём?
> что пиша на Си выделять/освобождать её нужно вручную с возможностью, например, забыть это сделать, в других языках будет по-другому, компилятор или рантам сделают эту работу за программиста. Это понятно?Понятно одно, что это делает программа (компилятор), а не машина. И а программу (компилятор, рантайм) пишет программист (другой) - не вы, и после этого вы говорите, что не спихнули работу на другого программиста?
> Или надо на палочках и верёвочках объяснять?
Лямбда исчисление и есть те самые палочки.
> Мина, скафандр, гриб, гриб, приём?
//ru.wikipedia.org/wiki/Аналогия
>И а программу (компилятор, рантайм) пишет программист (другой) - не вы, и после этого вы говорите, что не спихнули работу на другого программиста?Скафандр, а ты Си-код чем компилируешь? Самописным компилятором или всё-таки спихиваешь написание компилятора на других?
> Скафандр, а ты Си-код чем компилируешь?Так твоя программа на Си ток компилятору и нужна, не машине же. И не я же требую от компилятора (то есть от другого программиста) делать работу, которую должен делать я.
Да по мне - "Оптимизирующие компиляторы - первый враг совершенного языка! (ц)"
Миногриб, не уходи от ответа. Когда, спихнув работу на других, пользуешься готовым компилятором, тебе хорошо?
> Когда, спихнув работу на другихА что на Си уже нельзя написать компилятор Си? Пользуюсь своим - и что?
> пользуешься готовым компилятором, тебе хорошо?
Да, хорошо, но не я же предъявляю ему за то, что он не проверяет за меня выходы за границы массива. Не я же требую от программиста компилятора, чтобы он написал эти проверки.
> Миногриб, не уходи от ответа.
Дарёному коню в зубы не смотрят.
Гуляли с Веничкой 3 часа в лесу. Вернувшись, застали уже приехавшую из Москвы Галю. Привезла Ерофееву от Кьяры «гостинцы»: армянский коньяк и купленные в «Берёзке» брюки. «Хорошо, что не нижнее бельё», ― подумала я, хотя, как говорится, «дарёному коню в зубы не смотрят». Брюки Веничка тут же куда-то непочтительно заткнул, а коньяк, конечно, пошёл в ход. 16 октября[.] Самочувствие после «гостинца» неважное.
>Пользуюсь своимА вот и не пользуешься, не ври. И с библиотечками готовыми линкуешься и не морщишься. Ты не требуешь, чтобы их тебе написали, но с радостью линкуешься, а не пишешь сам. Так же как никто не требует, чтобы компилятор за них памятью управлял. Но если есть такой компилятор, то почему нет? Зачем ты только это лицемерие развёл про спихивание на других? Скучно тебе там одному в скафандре, одиноко?
>не я же предъявляю ему за то, что он не проверяет за меня выходы за границы массива
>не я же требую от программиста компилятораИ я не предъявляю… Сразу написал, что да, в Си этого нет — он такой какой есть — надо вручную всё. Зачем ты вообще паясничать про сапёра начал? Скучно тебе там одному в скафандре, одиноко?
> И я не предъявляю…"""
Проблемы языка как собственно языка — нет («ну вот такой он»)
"""Язык - «ну вот такой он», ясно.
"""
а языка как технологии («инструмента», если угодно) есть: необходимость вручную управлять памятью
"""А это предъявы кому? - не программисту, который вам даром компилятор написал? Он что, за вас должен еще писать менеджер памяти и проверяльщика выхода за границы массива?
> Скучно тебе там одному в скафандре, одиноко?
Какой вы душнила :) когда уже на марсе появится воздух. Алё, марсиане, займитесь уже этим вопросом.
> Зачем ты вообще паясничать про сапёра начал?
Затем, что предъявлять минам за то, что они не прощают ошибок - выглядит абсурдным.
Программист есть сапер.> А вот и не пользуешься, не ври.
Ага, давай докажи мне это :)))))
> И с библиотечками готовыми линкуешься и не морщишься. Ты не требуешь, чтобы их тебе написали, но с радостью линкуешься, а не пишешь сам.
Да и ничего тут постыдного нет.
> Так же как никто не требует, чтобы компилятор за них памятью управлял.
"""
а языка как технологии («инструмента», если угодно) есть: необходимость вручную управлять памятью
"""> Но если есть такой компилятор, то почему нет?
Ну да, когда есть шуруповерт, зачем мне отвертка, логика потребителя. Но требовать от отвертки быть шуруповертом - абсурд.
> Зачем ты только это лицемерие развёл про спихивание на других?
"""
а языка как технологии («инструмента», если угодно) есть: необходимость вручную управлять памятью
"""У вас потребительская логика на грани абсурда.
Так, я отзываю свои извинения за скафандра (за миногриба оставляю), так как ты, судя по всему натурально в скафандре и перегрелся, иначе я не знаю как ещё этот бред объяснить. Ты всё переврал, передёргал, кошмар. Навыдумывал что кто-то ТРЕБУЕТ от компилятора Си управлять памятью, хотя я написал же изначально (далее в переводе на скафандровый) «у отвёртки есть проблема: её нужно крутить рукой, это медленно и утомительно». Чувствуешь как заиграла твоя аналогия? Если тебе надо закрутить тысячу саморезов, то нужно брать шуруповёрт, а возиться с отвёрткой. Доходит ли это к тебе в скафандр? Так же я написал, что необходимость вручную управлять памятью не делает Си плохим языком, это его особенность, как то, что отвёртку необходимо крутить рукой. Скафандр, понимаешь ли ты это?
>У вас потребительская логика на грани абсурда.
>Программист есть саперЭм-м… просто возьми паузу, а?
>Да и ничего тут постыдного нет.Именно! Это ты начал кривляться «бе-бе-бе на другого работу спихнул»
>Ага, давай докажи мне это :)))))Скафандр, я же не сумасшедший, не втягивай меня в свои игры.
> Так, я отзываю свои извинения за скафандра (за миногриба оставляю), так как
> ты, судя по всему натурально в скафандре и перегрелся, иначе я
> не знаю как ещё этот бред объяснить.:))) хочу отметить, что вдыхаемый мною в скафандре кислород намного чище.
> «у отвёртки есть проблема: её нужно крутить рукой, это медленно и утомительно».:))) ну какой черт придумал шурупы? вон гвозди бери и забивай молотком, проще пареной репы. Или тоже утомительно?
> Чувствуешь
> как заиграла твоя аналогия? Если тебе надо закрутить тысячу саморезов, то
> нужно брать шуруповёрт, а возиться с отвёрткой.Ну кто придумал шуруповерт закручивающий за раз один шуруп - это медленно и утомительно. У шуруповерта есть проблема, мне нужно за раз, чтобы тысячу крутил.
> Доходит ли это к тебе в скафандр?
Задержка сигнала может быть от 3 минут 6 секунд до 22 минут 17 секунд. :)
> Так же я написал, что необходимость вручную управлять
> памятью не делает Си плохим языком, это его особенность, как то,
> что отвёртку необходимо крутить рукой.Особенность или "есть проблема", ну вот мне не ясно, то вы говорите - проблема, то сейчас говорите про особенность.
> Скафандр, понимаешь ли ты это?
Ответ уже в пути и достигнет земли через ....
> Эм-м… просто возьми паузу, а?
Да точно, нужно, я уже устал ржать просто, спасибо, что подняли настроение, а то было так одиноко :)
> Именно! Это ты начал кривляться «бе-бе-бе на другого работу спихнул»Ну если вы в языке с ручным управлением памяти не хотите делать это собственными руками, то возникает совершенно здравый (в марсианском смысле) вопрос, а кто это за вас будет делать? Отсюда и «бе-бе-бе на другого работу спихнул» :)))
> Скафандр, я же не сумасшедший, не втягивай меня в свои игры.
Ладно, все, прекращаю, следующий сеанс связи откладывается на неопределенное время :)
пс: Успехов, Земляне.
Извини, что миногрибом тебя называл и скафандром… Я беззлобно; уж больно выбесил ты своим тоном и аналогиями.
> Извини, что миногрибом тебя называл и скафандром…Джим червяк :)
> Я беззлобно; уж больно выбесил ты своим тоном и аналогиями.
в смысле тон? То что ваши утверждения порождают у меня кучу вопросов это называется тоном? В этом есть что-то плохое? Ну я могу понять школьных учителей, которое могут заткнуть ученика, который задает кучу вопросов (потому-что ему не ясно что-то в утверждении учителя), ссылаясь на нехватку времени, а в вашем случае почему это вас "выбесило"? Могли бы просто воздержаться от ответа, как обычно и сам делаю.
>почему это вас "выбесило"Ну вот потому что вы будто даже не прочитали толком что я написал, а сразу ринулись с бой с аналогиями наперевес, так как вы, видимо, посчитали, что здесь честь Си задета.
>Могли бы просто воздержаться от ответа, как обычно и сам делаюЯ уже напсил на вас в комментарии выше… Почитают что ответите, и умолкаю, а то так можно неделю собачиться. Хорошего дня!
>Ну вот потому что вы будто даже не прочитали толком что я написал, а сразу ринулись с бой с аналогиями наперевес,Ну дайте тогда определение понятию "проблема". Вы же пишите:
"""
Проблемы языка как собственно языка — нет («ну вот такой он»),а языка как технологии («инструмента», если угодно) есть:
необходимость вручную управлять памятью
а) накладывает дополнительную нагрузку на разработчика
б) добавляет возможностей ошибиться.
"""Отсюда "необходимость вручную управлять памятью" это по вашему проблема, а пункты а) и б) - это следствия этой проблемы.
АНАЛОГИЯ: Заменим "язык" на автомобиль
"""
Проблемы АВТОМОБИЛЯ как собственно АВТОМОБИЛЯ — нет («ну вот такой он»)а У АВТОМОБИЛЯ как ТРАНСПОРТНОГО СТРЕДСТВА («инструмента», если угодно) есть:
необходимость вручную управлять ДОРОЖНЫМ ДВИЖЕНИЕМ (имеет руль)
а) накладывает дополнительную нагрузку на ВОДИТЕЛЯ
б) добавляет возможностей СОВЕРШИТЬ ТРАНСПОРТНЫЕ ПРОИШЕСТВИЯ.
"""Ну вот, существование руля - проблема?
> Почитают что ответите, и умолкаю, а то так можно неделю собачиться. Хорошего дня!
И вам того же.
> языка как технологии («инструмента», если угодно) есть: необходимость вручную
> управлять памятью а) накладывает дополнительную нагрузку на разработчика б) добавляет
> возможностей ошибиться. Так как разработчики (пока что ещё) люди, они БУДУТ
> ошибаться (мантры «настоящие программисты с памятью не ошибаются» оставимПросто странно, почему инструмент времен проектов "аж на 3 тыщи строк":
https://github.com/dspinellis/unix-history-repo/tree/Researc...
> overing the period from its inception in 1970 as a 2.5 thousand line kernel and 26 commands, to 2018 as a widely-used 30 million line system.(т.е. тот же сабж - не самя важная либа, имеет раз эдак в 10 больше кода) "плохо натягивается" на современные проекты в пару-тройку (десятков) тысяч или даже миллионов.
Это видимо, потому что настоящие погроммисты перевелись, одни питонисты остались ...
Что сказать-то хотел не пойму?
Да, в своё время по дизассемблерному коду в hiew представлял себе сишный код )
> предсказуемых языковint arr[3] = {0, 1, 2};
return arr[4];Предскажи возвращаемое значеие, предсказатель (inb4 НАСТОЯЩИЕ сишники так не делают). Что на счёт этого:
int a, b;
a = 2;
b = a + ++a + ++a;Чему равно b? Опять НАСТОЯЩЕМУ сишнику?
Подтверждаешь мной написанное - все скользкие места Си, в том числе приведённые тобой, хорошо известны,пишите простой,прозрачный и понятный код, без всяких заумных извратов - и будет вам счастье!
Опять «делайте хорошо, не делайте плохо», а про предсказуемость налгал. Эх ты.
> return arr[4];а что результат выхода за границы не предсказуем? При обращении по адресу arr[4] у вас там разве не инт будет лежит?
> а что результат выхода за границы не предсказуем? При обращении по адресу arr[4] у вас там разве не инт будет лежит?Для полноты картины хотелось бы узнать: вы пишете на Си или просто мимо проходили и решили спросить?
> Для полноты картины хотелось бы узнать: вы пишете на Си или просто мимо проходили и решили спросить?Нет не пишу.
А теперь ответь те на вопрос у вас arr[i] int должен возвращать (по определению int arr[3] = {0, 1, 2};) или не int?
arr[i] безусловно есть int, но стандарт Си описывает поведение компилятора не для конкретной аппаратной архитектуры, а для некого абстрактного вычислителя. И в соответствии с его формальным определением нельзя обращаться к индексам массива за его пределами, а также нельзя читать неинициализированные значения. Таков закон, нарушение которого ведет к возникновению UB (undefined behavior).Но если вы возьмете конкретную реализацию компилятора языка Си, поведение будет следующим:
Если i в допустимых пределах и значение arr[i] предварительно инициализировано, то компилятор вставит обычное корректное чтение памяти.
Если i выходит за пределы массива или значение arr[i] не инициализировано, и компилятор НЕ использовал этот факт для оптимизаций, тогда программа либо прочитает некое значение ("мусор"), либо упадет с SEGFAULT, если по указанному адресу нет страницы памяти.
Если все то же самое, но компилятор сделал некую трансформацию кода при оптимизации (а он это делает, исходя из предположения, что UB в коде нет), то такое чтение может быть оптимизировано во что угодно — в чтение из памяти, в константу, или может быть совсем выброшено вместе с другим кодом.В итоге, да, результат выхода за границы непредсказуем и зависит от компилятора, флагов оптимизации, окружающего кода и фазы луны.
> определением нельзя обращатьсяпочему нельзя, обращаются ведь?
> Таков закон, нарушение которого ведет к возникновению UB (undefined behavior)
Это не закон!!!
//en.cppreference.com/w/c/language/behavior
"""
The C language standard precisely specifies the observable behavior of C language programs, except for the ones in the following categories:undefined behavior - there are no restrictions on the behavior of the program.
Examples of undefined behavior are memory accesses outside of array bounds, signed integer overflow, null pointer dereference, modification of the same scalar more than once in an expression without sequence points, access to an object through a pointer of a different type, etc.
Compilers are not required to diagnose undefined behavior (although many simple situations are diagnosed), and the compiled program is not required to do anything meaningful.
"""Последнее предложение: and the compiled program is not required to do anything meaningful.
Скомпилированная программа, а что значит скомпилированная?
> Но если вы возьмете конкретную реализацию компилятора языка Си
Ну вот в стандарте и написано в случае "memory accesses outside of array bounds" поступай (компилятор) как знаешь, ибо я (стандарт) не знаю (и не должен) как это поведение однозначно определить.
Отсюда разные компиляторы в праве делать как хотят, и тем самым они не нарушают стандарт. А вот правильно ли делает компилятор или нет это уже совсем другой вопрос. И не стандарт должен об этом заботиться. Стандарт вам должен был говорить каков должен был быть размер int в битах?
> В итоге, да, результат выхода за границы непредсказуем и зависит от компилятора, флагов оптимизации, окружающего кода и фазы луны.
Ну вот и разумный вывод, и помимо "зависит от компилятора, флагов оптимизации, окружающего кода и фазы луны" так же может быть оставлено неопределенным.
> почему нельзя, обращаются ведь?И каков результат? Он предсказуем?
> Это не закон!!!
Да, если ваша цель - получить программу, которая не будет делать ничего, как вы процитировали, meaningful. Исключением будет только если разработчики вашего компилятора выдадут вам справку, что такой код допустим и скомпилированная программа будет делать нечто предсказуемое.
> Ну вот в стандарте и написано в случае "memory accesses outside of array bounds" поступай (компилятор) как знаешь, ибо я (стандарт) не знаю (и не должен) как это поведение однозначно определить.
То, что вы описали, называется implementation-defined behavior. Undefined behavior - это то, чего в корректной (в соответствии со стандартом) программе НЕТ. Стандарт "говорит" компилятору: если тебе на вход подадут программу с UB (мусор), то можешь не беспокоиться, если у тебя на выходе тоже получится мусор.
> Отсюда разные компиляторы в праве делать как хотят, и тем самым они не нарушают стандарт. А вот правильно ли делает компилятор или нет это уже совсем другой вопрос. И не стандарт должен об этом заботиться.
При наличии в программе UB компилятор волен сделать что угодно, и вопрос правильности здесь не стоит. Например, он может собрать бинарник, который при запуске будет падать с SIGILL, и такое поведение будет соответствовать стандарту.
> Стандарт вам должен был говорить каков должен был быть размер int в битах?
Если смотреть на Си не как на язык, а как на протокол - от этого больше проблем, чем пользы.
https://faultlore.com/blah/c-isnt-a-language/
https://faultlore.com/blah/rust-layouts-and-abis/
> И каков результат? Он предсказуем?Он может быть определен, как вы же и указали - зависит от компилятора, архитектуры, и фазы луны.
> Да, если ваша цель - получить программу, которая не будет делать ничего, как вы процитировали, meaningful.
А зачем вы вырываете из контекста? Там говорится, что компилятору может быть все равно на тот или иной случай неопределенного поведения и он может не выдавать никаких предупреждений и в таком случае скомпилированная (корректная по мнению компилятора) программа не обязана выполнять что-либо осмысленного, в том и только том случае если компилятором не учтено то самое поведение (предсказуемое UB). Тут речь не про то, что вы пишите программу, которая ничего не делает осмысленного.
> То, что вы описали, называется implementation-defined behavior. Undefined behavior - это то, чего в корректной (в соответствии со стандартом) программе НЕТ.
пройдитесь по ссылке которую я оставил, это не я описывал, это там написано.
> Стандарт "говорит" компилятору: если тебе на вход подадут программу с UB (мусор), то можешь не беспокоиться, если у тебя на выходе тоже получится мусор.
:)))) стандарт говорит, вот список UB, - компилятор, вот как хочешь вот так и определяй эти случаи, и все, и никому ни чем ты не обязан.
> При наличии в программе UB компилятор волен сделать что угодно, и вопрос правильности здесь не стоит.
Почему не стоит? Выход за границы массива - UB, а компилятор может пихнуть проверку выхода за границы, и выдавать ошибки в рантайме (компайлтайме) и т.д. Правильно ли он поступает в таком случае - открытый вопрос. Короче, это ге тема обсуждения.
> от этого больше проблем, чем пользы.
Как по мне, от всех ЯП "высокого уровня" - больше проблем, чем пользы.
> b = a + ++a + ++a;вот ваш пример это unspecified behavior (Order of evaluation) и в этом случае компилятор может на свое усмотрение трактовать эту запись и никакого UB тут не будет.
> но стандарт Си описывает поведение компиляторасовсем забыл про это: именно в случаях undefined behavior (unspecified behavior, implementation-defined behavior, locale-specific behavior) компилятор не описывает это поведение и оставляет на усмотрение разработчика компилятора.
> компилятор не описываетПоправка: стандарт не описывает
Где налгал-то? Я же не утверждал, что нет случаев, когда поведение не определено, но они все давно известны и описаны, просто не нужно их использовать в программах, это и есть предсказуемость.
Похоже, вы не в состоянии понять простую, казалось бы, вещь. То, что где-то что-то определено, не означает, что кто-то не допустит ошибку в работе с этим. И многолетняя практика показывает, что ошибки допускаются постоянно вне зависимости от квалификации программиста при условии, что код достаточно сложный и большой по объёму. Си изначально не проектировался для сложного современного ПО. И об этом тоже уже говорили на этом сайте неоднократно. Несколько тысяч строк кода - вот типичная для того времени (когда возник Си) программа. Современный код намного сложнее, Си для такого ПО уже плохо подходит. Поэтому и получили такое распространение более безопасные языки, полностью вытеснив Си из многих областей применения.
> кто-то не допустит ошибку в работе с этимНу так это косяк тех, кто ошибается, что ж теперь, на всяких ошибальщиков равняться?
> Си изначально не проектировался для сложного современного ПОЗадачи всегда были сложными, и современные задачи ничем от задач прошлого по сложности не отличаются. Например, реализация сетевого стека простая чтоль? Просто раньше умели сложные задачи решать простым кодом.
> Несколько тысяч строк кода - вот типичная для того времени (когда возник Си) программаТак и должно быть - большие проекты нужно разбивать на модули в несколько тысяч строк когда, а не городить каловые завалы монолитного говнокода.
> Современный код намного сложнееЕго делают сложным: отсутсвие проектирования, декомпозиции, методологии ускоренной разработки от "эффективных менеджеров".
> и получили такое распространение более безопасные языки, полностью вытеснив СиНе получили и не вытеснили, потому что многие задачи можно решить только на Си и никакие "более лучшие" сверхвысокоуровневые языки там неуместны.
>Сишка - язычок стандарт по undefined behavior. И никакими сравнениями ты её не улучшишь.О, теперь я понял, каким образом Rust улучшили по сравнению с другими языками. Его просто сравнивали со всеми другими!
> О, теперь я понял, каким образом Rust улучшили по сравнению с другими языками. Его просто сравнивали со всеми другими!Да, со всеми другими. И не просто сравнивали, но и заимствовали! А потом даже об этом в документации написали.
>в Си это сразу вылезает наружу
>безопасный язык с защитой от дурака не даёт наляпать глупых ошибок,
>но логические ошибки никуда не деваются
>просто их сложнее становится обнаружить.Вот это умственная акробатика, браво! БРА-ВО!
Что не так, растоманы не делают логических ошибок?
Делают, все делают. Но ошибки работы с памятью не всегда связаны с логическими ошибками и соответственно утверждение, что через ошибки работы с памятью вылазят логические ошибки — неверно. «В некоторых случаях вылазят» было бы правильно, а так нет.
виноват язык, а не человек? ну ок... вся суть современного человека -- тотальная дебилизация
С такими вообще трудно разговаривать, у них чуть что "сишка" виновата. А деградация отрасли на лицо.
На сишке можно писать без CVE, но тогда придётся каждый указатель перед обращением проверять 20 раз на предмет всяких недопустимых значений, что в итоге скорость написания будет во много раз ниже, и приложуха на сишке станет медленнее, чем на Расте. Правильно, сишники что сэкономить такты проца, пишут CVE и им норм, иначе скорость сишки пользовать не получится.
Надо писать так, чтобы указатель не принимал недопустимых значений, тогда и проверять не придётся. И хорошие программы именно так написаны и работают десятилетиями без всяких сбоев.
"Делать хорошо, а плохо не делать", "просто писать без ошибок". Как же раньше-то никто не догадался.
> "просто писать без ошибок"а просто Х забить на ошибки почему вас не устраивает как вариант? почему надо кричать, что язык плохой?
> Как же раньше-то никто не догадался.
Вот "делай хорошо, чтобы было хорошо".
Да, так и надо - всё гениальное просто, как и сам Си. Это как вождение автомобиля - нужно водить хорошо, а не водить плохо, не нужно делать ошибок - а то попадёшь в ДТП! Или автомобили - это тоже "дыряшки", потому что позволяют выезд на встречку? Срочно переходим на трамваи?))
> Срочно переходим на трамваи?))нет же, зачем руль вообще поворачивается, надо его из машины удалить, чтобы был трамвай-вай-вай-вай. :))
> Или автомобили - это тоже "дыряшки", потому что позволяют выезд на встречку? Срочно переходим на трамваи?))Вообще-то да, именно так. Просто мы настолько привыкли к автомобилям, что не осознаём, насколько они опасны. С сишечкой, впрочем, так же.
Ну вот, мы привыкли, значит это и есть настоящая жизнь, какой бы она ни была, со всеми её достоинствами и недостатками, в том числе с возможностью разбиться.. А если тебя всегда будут водить за ручку по рельсам, то разве это жизнь? Скиснешь от жизни такой...
Если бы разбиться было личным делом каждого, тогда никаких возражений. Только вот часто при этом уносятся и чужие жизни (а виновник за рулём может не получить и царапины).
> что в итоге скорость написания будет во много раз нижеа скорость "думания" в чем измеряется?
> но тогда придётся каждый указатель перед обращением проверять 20 раз на предмет всяких недопустимых значений
в этом нет необходимости, если есть контроль, что в каждый указатель "положится допустимое значение". И речь должна идти не о "предполагаем, что до этого момента в указателе лежит допустимое значение", а "утверждаем (доказательством), что в данный момент в указателе лежит допустимое определенное значение".
> и приложуха на сишке станет медленнее
Нельзя применять понятие "медленный" для алгоритма который удовлетворяет необходимым и достаточным условия оптимальности.
> Правильно, сишники что сэкономить такты проца
Что сэкономили, принимая плоскую модель памяти (архитектуру Фон-Неймана)?
А я помню, как её в зависимости гимпа пропихивали (казалось бы, где сабж, и где гимп). А всё очень просто, гипм -- одна из популярных программ, и в популярных программах должны быть уязвимые забагованные зависимости. Это делается вполне осознанно, просто начните записывать имена и фамилии. Разработчиков не так и много, для каждого реально составить профиль "достижений".
ну так провел бы аналитику, опубликовал (даже анонимно) статью, где разоблачил бы агентов госдепа. а так просто теория заговора от второклассника Пети
> ну так провел бы аналитику, опубликовал (даже анонимно) статью, где разоблачил бы
> агентов госдепа. а так просто теория заговора от второклассника ПетиЯ видел много хорошо аргументированных статей, ну и где они сейчас? Всё прекрасно удаляется из интернета, а публичность всегда минимальна. И я часто не мог найти, даже точно зная, что именно и где искать.
Отговорки. Опеннет костьми ляжет но удалить не даст.
Иди в старые темы, лог модерирования глянь. Не дадут удалить они.
Все коммитв открыты. Давай проводи.
Все так, но они сейчас пошли хитрее - проворачивают теневую глобальную операцию. План такой:
1. Умышленно дискредитировать язык и попутно занести бекдоров в софт.
2. Начать публичную компанию, в ходе которой объявить Си как неподходящий язык и в замен придумать новый(или на практике - захватить существующий, но никому не известный язык). Представить его как безопасный.
3. Подготовить инфраструктуру для деплоя бекдоров. Назвать ее крейт'ами.
4. В час икс, когда все основные проекты уже будут переведены на раст и бекдоры будут развернуты на целевом железе по всему миру - нажать кнопку.
Сомневаюсь, что ошибки вносятся для дискредитации (хотя можно ожидать всего), но это вот безмерное доверие к совершенно централизованному хранилищу пакетов меня всегда смущало. Да и без доверия вполне может пройти незамеченным, если отдавать модифицированные пакеты только определённым людям (на основании организации или страны пребывания). И пиара действительно многовато. Незаметно развернуть по всему миру? Маловероятно, хотя в средствах инструментирования и дизассемблерах код на расте действительно выглядит не очень (может, что и улучшилось с тех пор).
Опен сорс едят изнутри. Как минимум, чем сложнее софт, тем сложнее в нём разобраться. Независимым разработчикам-энтузиастам здесь делать нечего. Получается, что вроде всё открыто, но реально всем владеют корпорации. Они зашли с другой стороны. Хочешь не хочешь - будешь пользоваться тем, что тебе подсунут. Что там понапихано - не узнаешь. Да плюс ко всему бесконечно новое железо надо будет покупать, чтобы софт мог работать. Сплошные плюсы. Микрософт по сравнению с нынешними получаются, так, деревенские дурачки.
>3. Подготовить инфраструктуру для деплоя бекдоров. Назвать ее крейт'ами.Так, а что мешает использовать существующую инфраструктуру «зависимостей из репозитория диска»? Прошу писать только неправильный ответы. Я начну: в дистре мейнтейнеры не пропустят бекдор.
> Так, а что мешает использовать существующую инфраструктуру «зависимостей из репозитория диска»? Прошу писать только неправильный ответы. Я начну: в дистре мейнтейнеры не пропустят бекдор.В каком именно?
И кто мешает взять пакет дебиан, взять исходники из которых он собран и сравнить с исходниками в репозитарии разработчиков. Отдельным вопросом идут накладываемые сверху патчи. Их придется анализировать и ходить по ссылками на места откуда они утянуты в пакеты debian. И да вот тут особую роль играет бинарная повторяемость сборки пакетов из пакетов исходников.
>взять исходники из которых он собран и сравнить с исходниками в репозитарии разработчиковВот только делать этого никто не будет, apt-get install и соглашаемся на все зависимости. Что там мейнтенеры на общественных началах наложили в пакеты? Да норм всё, погнали! Главное что не карго. (К слову, крейты можно опакетить и положить в репу дистра, будет карго не из «интернета» брать, а из репы)
> Вот только делать этого никто не будет, apt-get installОтвыкай говорить за всех. Часть процессов требуют подтверждения, что бинарники собраны из конкретных исходников.
> К слову, крейты можно опакетить и положить в репу дистра
Для нормального варианта использования необходимо что бы разработчики использовали только опакеченное. Но культура разработки не позволяет прийти к варианту или самому опакечивать или использовать опакеченное. И да культура разработки также приводит к полному игнорированию проблем совместимости. Когда одна программа может использовать разные версии библиотек, опакеченные в разных дистрибутивах.
С использованием в rust разных версий одного и того же вообще беда.
Slackware, как всегда, неуязвима.
Я думаю дело не в уязвимостях - посмотри список спонсоров раста, он вполне себе открыт. Они просто хотят открытый сырец завендорлочить, а точнее обгадить на других платформах, что кстати так же открыто и делают.
Либо как вариант их шарахнуло альтруизмом и они внезапно решили что кибер секьюрити это самая приоритетная проблема, и начали срочно донатить
> Я думаю дело не в уязвимостях - посмотри список спонсоров раста, он
> вполне себе открыт. Они просто хотят открытый сырец завендорлочить, а точнее
> обгадить на других платформах, что кстати так же открыто и делают.Главное, не смотри список членов "руко-водящего комитета" GCC
https://gcc.gnu.org/steering.html (гугл, ай-би-эм^W красношляпа, нвидиа)
Опять сложный и коварный план™. Зачем нужны №2, №3 и №4, если №1 в части «занести бэкдоров в софт» и так успешен на протяжении 53 лет?
Хорошая конспирология, годная. А есть ещё?
Я как-то случайно обнаружил, что тетрис слинкован с libdbus.
У майкрософта в блокноте был код, запускающий фоновую "телеметрию" (если та по какой-то причине отключена). Видимо, что-то из той же оперы.
> Библиотека применяется в GNOME Shell, браузере Epiphany,
> просмотрщике изображений Shotwell, в GStreamer-плагине souphttpsrc
> double-free
> для удалённого выполнения своего кода при обработке специально
> оформленных запросовЯ вот нифига не удивлен :)
PS: ждем появление комментариев "а чо такова? как вам это помешало? покажите как вас взломали"
Для гнома это даже простительно.
Нет, не простительно. Гном лучшее и самое распространенное DE и оно должно быть еще лучше.
Опять за границеу буфера вышли?)))
Ты просто никогда заграницей не был, вот и бесишься, кто-то хотя бы в Си выходит
> Ты просто никогда заграницей не был, вот и бесишься, кто-то хотя бы
> в Си выходитПоздравляем, вы выиграли в номинации "Комментарий века!" :)
За границей всё таки был.
>"кто-то хотя бы в Си выходит"Пускай дальше выходят! Любой другой язык лучше чем это)
COBOL рулит !Могу посоветовать ещё PL/I
На каком сервере используется Gnome?
На типичном Бубнту-сервере, который ОдинЭсс'ники ставят по своему типовому скрипту...
xorg)
Что значит на каком, разве есть статистика? А так, никаких проблем нет ставить на сервер, хоть гном, хоть кеды, хоть винду в виртуалбоксе. Это всё стереотипы и вкусовщина.
Вкусовщина ставить на сервер gnome или KDE - это пять!Я так не умею тролить, ты уроки даешь? Есть какие-нибудь курсы тролинга и сколько стоят?
Ну вообще-то, на сервер можно ставить всё что угодно. Это для тебя новость? Шаблоны треснули?
>" Есть какие-нибудь курсы тролинга и сколько стоят?"Ежедневно общайся и участвуй в культурных диалогах на опеннет. Стойкость: время, устройство для интернета и оплата за интернет.
Интернет и так оплачен на месяц вперёд.
Думаю на многих, я был на десятке вебинаров от редхата, они все вели настройки через гуй и там везде был гном.
Ну так это опеннетовские тру-хакиры всё через консольку и правку конфигов емаксом делают, а людям работать надо.
Так через консольку же удобнее.
А главное, яснее видно, что там на самом деле и как происходит.
то-то думаю, почему гента так навязчивое требует установки libsoup даже при отключении соотв.флагов. даже флетпак без этой дырки для цру не установишь. сложнее из генты только удалить пакет с ssh.
либсуп, наверное, по популярности дыр у цру где-то рядом с avahi и at2-spi, которые тоже требуют принудительной установки даже с выключенным флагом accessibility.
не удивлюсь, если лет через дцать мы увидим новость об уязвимостях в сервисе чтения с экрана at-spi (нужен 1% пользователей, а устанавливают 99%).
дескать, извините, ошибочка вышла, чтение с экрана чисто случайно может активироваться удалённо через дбас.
пацаны, не используйте ментовские gtk/qt в своих проектах.
есть же efl-библиотеки, в cosmic'е уже появился свой тулкит. как будто рисовать окошки с менюшками такая сложная задача в 2025 году.
Дубас через сеть работать не могёт.
ну дык не сам дубас передаёт, а конкретное приложение типа тор-браузера после переговоров по а11-шине с дубасом.
> позволяет клиенту инициировать чрезмерное потребление памяти на сервереЗачем ставить libsoup на сервере.
В комментах как всегда развели конспирологию. Обычное дело, что находят уязвимости. Никто их специально не вносит и не продвигает. И в более серьезных программах находят уязвимости.
>Никто их специально не вносит и не продвигает.Уже были случаи, когда это делалось умышленно. Просто народ любит впадать в крайности, размышляя о подобном. Вот вы тоже решили впасть в крайность, полностью отрицая злонамеренность НЕКОТОРЫХ инцидентов.
Никто даже не понял что эти свешки не эксплуатируемые, а сколько энергии потрачено в комментах. Ну пофазили этот либсуп, стал он теперь безопасным как камень. Что непонятного, когда уязвимости ищут - их находят и фиксят.