LINUX.ORG.RU

Навеяно свежей дырой в Xorg

 , ,


9

7

Привет, ЛОР!

Ты, наверное, уже видел свежую дыру в Xorg, патч для которой выглядит буквально вот так:

-        else
+        else {
             free(to->button->xkb_acts);
+            to->button->xkb_acts = NULL;
+        }

В связи с этим у меня возник вопрос: а почему в стандартной библиотеке C нет макроса SAFE_FREE()?

#define SAFE_FREE(ptr) do{free(ptr);(ptr)=NULL;}while(0)

Напомню, что значение указателя после вызова free() является неопределённым согласно стандарту. Не только значение памяти, на которое он указывает, но и значение самого указателя, и работа с ним представляет собой жуткое undefined behaviour, а значит единственное что можно сделать – занулить его.

Так вот, почему даже таких банальных вещей нет? Я уже не говорю про строковый тип, а то даже Эдичка тут строки не осилил.

Моя гипотеза тут: C – это язык культа страданий во имя страданий.

Ответ на: комментарий от hateyoufeel

Да, лоханулся.

Но в общем я имел в виду, что malloc возвращает null в случае любой ошибки. Сейчас вот глянул, пишут что при передаче 0 в зависимости от реализации имеет право вернуть null

khrundel ★★★★
()
Ответ на: комментарий от hateyoufeel

Однако мы знаем, что писали его не инопланетяне и не под грибами, а люди явно не глупее нас с тобой. Следовательно, были причины писать так, не?

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

khrundel ★★★★
()
Ответ на: комментарий от khrundel

Следовательно, были причины писать так, не?

Вначале язык был одним из множества, в ту пору, когда считалось не зазорным писать на ассемблере и оно было экономически оправданно. Некоторое время это даже и не замечалось, покуда изживалась привычка писать на ассемблере. После этого уже стали возникать крамольная мысль, что UB в языке, это не самое лушчее решение:

" Рыть пришлось руками. Хорошо, что земля была мягкой. Молдер торопливо разгребал рыхлый слой обеими ладонями — и вдруг ему пришло в голову, что, если поглядеть со стороны, он сейчас похож на животное куда больше, нежели шериф, который споро, но, в отличие от него — отнюдь не лихорадочно, работал, как и подобает человеку, лопатой.

Эта мысль его подкосила. Он даже замер.

— Что там? — свистящим шепотом спросила Скалли, безоговорочно решив, что, коль скоро он перестал наяривать передними лапами, добыча уже у него. " (Картер Крис, Файл №220)

Tinker
()
Последнее исправление: Tinker (всего исправлений: 1)
23 февраля 2024 г.
Ответ на: комментарий от khrundel

Однако мы знаем, что писали его не инопланетяне

Нет, не знаем.

не под грибами

Этого тоже не знаем, но есть множество косвенных доказательств обратного.

люди явно не глупее нас с тобой

Судя по нынешнему состоянию C, стандарт писали не только люди глупее тебя, они были глупее среднего ЛОРовца в принципе.

А на сегодняшний день стандарт C вообще пишут фурри-гомосексуалисты.

коль скоро ею продолжают пользоваться и она не сильно воняет

Она не воняет, она давно протекла гнильём и позаражала сифилисом и тифом половину населения.

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Смени работу, страдалец.

Кто бы авторам вот этого говна работу поменял. И ведь зацени, там сплошные переполнения или use-after-free, т.е. типичное сишное говно.

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 1)