The OpenNET Project / Index page

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

Уязвимость в HTTP-сервере muhttpd, открываяющая доступ к файлам вне рабочего каталога

05.08.2022 16:37

В HTTP-сервере muhttpd, применяемом преимущественно в маршрутизаторах и точках доступа, выявлена уязвимость (CVE-2022-31793), позволяющая неаутентифицированному атакующему через отправку специально оформленного HTTP-запроса загрузить произвольные файлы, насколько это позволяют права доступа, под которыми выполняется HTTP-сервер (во многих устройствах muhttpd запускается с правами root). Например, атакующий может получить доступа к файлам с паролями, настройками беспроводного доступа, параметрами подключения к провайдеру и закрытыми ключами.

Проблема вызвана ошибкой при обработке пути в запросе, что позволяет обратиться к файлам, вне корневного каталога web-сервера. Атака сводится к указанию вначале пути любого дополнительного символа, отличного от точки, слеша и вопроса. Например, для загрузки файла /etc/hosts достаточно отправить запрос "GET a/etc/hosts" или "GET a/etc/hosts" (printf "GET b/etc/hosts\n\n" | nc server port).

Причина указанного поведения в том, что открытие запрошенного файла производится командой "open(&req->filename[1], O_RDONLY)" с предварительным выполнением функции chdir() для перехода в корень web-сервера. Указание &req->filename[1] приводит к игнорированию первого символа пути (разработчики подразумевали, что первый символ всегда "/"). Таким образом, при запросе "GET /etc/hosts" сервер попытается открыть файл по относительному пути "etc/hosts", но если указать вначале любой дополнительный символ ("GET a/etc/hosts") - последующий путь будет обработан полностью.

Проблема присутствует начиная с самой первой версии muhttpd и устранена в выпуске 1.1.7. Из устройств, использующих muhttpd, наличие проблемы подтверждено в маршрутизаторах SaskTel и Arris. Потенциально проблема также может проявляться в устройствах, выпускаемых компаниями AT&T, Frontier и Windstream. При ограничении доступа к порту HTTP только для внутренней сети атака может быть совершена из внешней сети при помощи техники "DNS rebinding", позволяющую при открытии пользователем определённой страницы в браузере отправить HTTP-запрос на сетевой порт, недоступный для прямого обращения через интернет.

  1. Главная ссылка к новости (https://kb.cert.org/vuls/id/49...)
  2. OpenNews: Обновление DNS-сервера BIND c устранением уязвимости в реализации DNS-over-HTTPS
  3. OpenNews: Обновление HTTP-сервера H2O 2.2.5 с устранением уязвимости
  4. OpenNews: Ещё одна уязвимость в Apache httpd, позволяющая обратиться за пределы корневого каталога сайта
  5. OpenNews: Уязвимость в http-сервере Apache 2.4.49, позволяющая получить файлы вне корня сайта
  6. OpenNews: Уязвимость в http-сервере Nostromo, приводящая к удалённому выполнению кода
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/57601-muhttpd
Ключевые слова: muhttpd
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (81) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 17:52, 05/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Не уязвимость, а канал доступа. Красиво, вряд ли только сейчас нашли. Это примерно как у многих сайтов ластик в интернет вывешен или VNC без пароля, только лучше.
     
     
  • 2.3, Аноним (3), 17:58, 05/08/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    А писали бы на единственной безопасном и быстром языке Carbon, то уязвимость они бы все равно нашил куда вставить.
     
     
  • 3.9, Аноним (-), 18:36, 05/08/2022 [^] [^^] [^^^] [ответить]  
  • +8 +/
    Что-то подсказывает что лажаться с обработкой путей кодеры будут одинаково, хоть на брейнфаке.
     
     
  • 4.16, Аноним (16), 18:55, 05/08/2022 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Чтобы не лажаться с обработкой путей, нужна capability-based security model. Но unix-way - это продолжать жрать кактус.
     
     
  • 5.41, Аноним (41), 23:09, 05/08/2022 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > нужна capability-based security model

    которую изобрели в unix системах

     
  • 5.46, Аноним (-), 00:22, 06/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Чтобы не лажаться с обработкой путей, нужна capability-based security model.

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

    Пара нюансов?
    1) У вон тех может быть инновационный кернел типа 2.6.32 где наиболее эффективных фич конечно же нет. Оно было в каком году вообще? Я даже и не помню этого уже.
    2) Насколько там всем было на безопасность - намекает пуск вебсервака под рутом. Думаете вон ТЕ станут заморачиватья чем-то более продвинутым? Плин, там фирмварь делана жоскими индусами которые рады по уши что доисторический CrapDK от вендора вообще что-то работающее выдал, все, узкоглазикам из *-link или чего там еще можно идти это продавать :)

     
     
  • 6.57, YetAnotherOnanym (ok), 09:49, 06/08/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Правильно, пока ты будешь имплементировать свою продуманную архитектуру, санитизировать каждый пук, прилетающий извне и огораживать все компоненты капабилитями, вон те выкинут на рынок дешёвую поделку, сделанную по принципу "тяп-ляп и в продакшон". И твоя железка будет интересна только кучке гиков, которые имеют неприличную манеру совать нос под капот.
     
     
  • 7.64, Аноним (64), 21:24, 06/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ну да, ну да, поэтому хомякам придется жить с д рьмовыми железками где фирварь п... большой текст свёрнут, показать
     
  • 5.56, YetAnotherOnanym (ok), 09:43, 06/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Чтобы не лажаться с чем бы то ни было, надо думать головой. А владельцу бизнеса или лицу, принимающему решения - думать головой, чтобы наннимать разрабов, которые думают головой.
    А на случай лажи, которую почему-то не получилось избежать - да, использовать в том числе и capability-based security model.
     
  • 3.90, Аноним (90), 17:06, 10/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Странно, а я думал, что быстрый и безопасный это раст. Учу программирование строго по опеннету, если что.
     
  • 2.36, Аноним (36), 21:53, 05/08/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А вот ужасный сустемдэ своим сервисом изолировал бы юзерспейс!
     
     
  • 3.47, Аноним (-), 00:23, 06/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Он 2 метра RAM жрет, а в том крапе всей оперативы 16..32 мега и ее впритык :)
     
  • 3.58, Аноним (58), 10:00, 06/08/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ты бы еще в докере предложил запустить.
     

  • 1.2, anonym13 (?), 17:57, 05/08/2022 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • +3 +/
     

     ....ответы скрыты (11)

  • 1.8, Аноним (8), 18:30, 05/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +14 +/
    > разработчики подразумевали, что первый символ всегда "/"

    Взоржал.

     
  • 1.21, Аноним (-), 19:02, 05/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ужас какой! Вы прикрывайте дырки, а то имеет все кто хочит!
     
  • 1.25, Аноним (-), 19:12, 05/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ну и дырыще!
     
  • 1.30, Аноним (-), 19:43, 05/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Вот тебе и дебиан!
     
     
  • 2.48, Аноним (48), 00:27, 06/08/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Нет такого пакета в этой репе! Сектор Б на барабане. Поздравляем, Вы - банкрот!
     

  • 1.32, BrainFucker (ok), 20:16, 05/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Даже и не знал что такой сервер вообще есть.
     
  • 1.33, Аноним (33), 20:27, 05/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Эффективный опенсорс...
     
  • 1.34, Аноним (34), 20:51, 05/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > muhttpd (mu HTTP daemon) is a simple but versatile web server written in portable ANSI C

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

     
  • 1.35, Аноним (35), 21:10, 05/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Падаждите, а куда смотрели тысячи глаз? На три другие стены?
     
     
  • 2.38, Sw00p aka Jerom (?), 22:02, 05/08/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    вытекли :)
     
  • 2.42, Аноним (41), 23:12, 05/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Они как раз и нашли эти уязвимости.
     
     
  • 3.45, Анонн (?), 00:13, 06/08/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ахаха, ты серьезно?
    "Проблема присутствует начиная с самой первой версии muhttpd ..." это с 2007 года (надеюсь, иначе вообще с 2002)!
     
  • 2.50, Аноним (50), 01:10, 06/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Учитывая, что я вообще впервые слышу про такой веб-сервер, глаз там было по числу коммитеров умножить на полтора. :)
     
     
  • 3.63, Аноним (35), 19:51, 06/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ну ты может и в первый раз слышишь, а его используют серьезные ынтерпрайз конторы типа "AT&T, Frontier и Windstream"
     

  • 1.39, karl93rus (ok), 22:20, 05/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    На расте такой дыры не было бы?
     
     
  • 2.40, Аноним (40), 22:35, 05/08/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Слышал песню от группы Ленинград под названием Дорожная?
     
  • 2.44, Онаним (?), 23:18, 05/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Растишка втуда где это используется без утрамбовки не залезет.
     
  • 2.52, Cucumber (?), 05:17, 06/08/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    В расте такая болезненная работа с путями, что там даже никогда не заметили бы проблемы за мишурой из бесконечных кастов OSString в String, Path в PathBuf, ResultReadDir в ReadDir в IteratorResultDirEntry в IteratorDirEntry в DisplayDirEntryPathExt и обратно.
     
     
  • 3.53, Аноним (-), 06:28, 06/08/2022 Скрыто ботом-модератором     [к модератору]
  • +/
     
     
  • 4.60, Аноним (-), 11:47, 06/08/2022 Скрыто ботом-модератором     [к модератору]
  • +1 +/
     
     
  • 5.65, Аноним (-), 21:45, 06/08/2022 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 3.66, Аноним (-), 21:46, 06/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > В расте такая болезненная работа с путями, что там даже никогда не
    > заметили бы проблемы за мишурой из бесконечных кастов OSString в String,
    > Path в PathBuf, ResultReadDir в ReadDir в IteratorResultDirEntry в IteratorDirEntry в
    > DisplayDirEntryPathExt и обратно.

    Интересно а в всем этом не будет новых бонусных вулнов как это уже было в их stdlib'е? :)

     

  • 1.43, Онаним (?), 23:17, 05/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    muahahahttpd
    Ну конечно "разработчики" эмбедовки тоже кони ещё те. С цирком.
    httpd от рута - это прелесть просто.
     
     
  • 2.49, Аноним (48), 00:29, 06/08/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да это обычно обдолбаные узкоглазики которые койкак слабали вообще и скорее продавать.
     

  • 1.51, Аноним (51), 04:41, 06/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Недырявый домашний роутер - это что-то вообще из области фантастики )
    Хотите за 30 баксов и еще чтоб безопасно?
     
     
  • 2.93, anonymous (??), 06:24, 13/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Никакой фантастики. Дайте железо и дрова, а линукс и прочий софт я сам накачу. А если в линуксе найдут дыру - обновлю линукс, это не проблема. Зачем вообще из эмбед делать отдельную сущность? Все те механизмы, которые работают на десктопах и сереверах, будут обеспечивать безопасность и на эмбеде.
     

  • 1.54, Sylvia (ok), 08:06, 06/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    О существовании некоторых вебсерверов (и некоторого другого софта) узнаешь из сообщений об уязвимостях в них
     
  • 1.55, abu (?), 09:23, 06/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    muhttpd? щито?
     
  • 1.59, Аноним (58), 10:01, 06/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    То что модератор удалил все комментарии про то что уязвимость очевидно вставлена намеренно лишь подтверждает этот факт.  
     
  • 1.61, Аноним (61), 18:20, 06/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    20 лет назад... иис... дежавю....
     
  • 1.62, Аноним (62), 19:19, 06/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    дайте угадаю,. следующая найденная там уязвимость будет
    GET /../../../../../../../etc/passwd
    ?
    потому что 'используя технику "DNS rebinding"' затруднительно пинуть именно "a/etc/passwd" - браузер надо еще както заставить такое выдать. А вот /../../../../../../../etc/passwd вообще не проблема...
     
     
  • 2.69, Аноним (69), 21:15, 07/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > браузер надо еще както заставить

    Настоящий хакер (крякер тем более) работает с сетью только через браузер.

     
  • 2.70, Пароним (?), 02:40, 08/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ты что, хакир, что ли?
     

  • 1.67, burjui (ok), 04:49, 07/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    extern char **environ;

    int clearenv(void) {
    /* We would like to free previously set environment variables here,
    * but at least FreeBSD 5.1 doesn't let us */
    /* Create empty environment */
    environ = malloc(sizeof(char*));
    if(environ) {
    *environ = NULL;
    }

    return 0;
    }

    Беллиссимо. Это не местные ыксперты писали, которые в новости про Rust бегают?

     
     
  • 2.71, Аноним (-), 09:28, 08/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А что тебе не нравится?
     
     
  • 3.72, burjui (ok), 11:21, 08/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Серьёзно? Местных сишников послушать - так они лучшие в мире и никогда не делают ошибок, а ты очевидных косяков не видишь :)

    Во-первых, вместо этой портянки

    environ = malloc(sizeof(char*));
    if(environ) {
        *environ = NULL;
    }

    достаточно написать

    environ = calloc(sizeof(char*), 1);

    т.к. NULL в C - это просто ноль, приведённый к типу void*.

    Во-вторых, тут как в анекдоте: вы или штаны наденьте, или крестик снимите. Зачем clearenv() возвращать int, если она всегда возвращает ноль? Тут уж или void clearenv(), или давайте возвращать ещё что-то кроме нуля.

    В-третьих, если функция возвращает некие коды, неплохо бы их объявить, а не просто return 0. Вернуть ноль любой дурак может, а вот чтобы понять, что он значит в этой функции, нужно уже лезть в исходник,

    В-чертвёртых, комментарий "Create empty environment" должен комментировать функцию, а не её внутренности. И вообще, он должен быть в заголовочном файле.

    В общем, как-то так:

    ---- clearenv.h ----

    #define CLEARENV_SUCCESS 0
    #define CLEARENV_FAILURE -1

    /* Create empty environment */
    int clearenv(void);

    ---- clearenv.c ----

    int clearenv(void) {
        /* We would like to free previously set environment variables here,
         * but at least FreeBSD 5.1 doesn't let us */
        environ = calloc(sizeof(char*), 1);
        return environ ? CLEARENV_SUCCESS : CLEARENV_FAILURE;
    }

     
     
  • 4.73, Аноним (-), 13:39, 08/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Это всё, что ты перечислил, стилевые придирки Которые совершенно нерелевантны д... большой текст свёрнут, показать
     
     
  • 5.74, burjui (ok), 14:55, 08/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Ты не читал аргументацию Кармака, почему DRY плох и почему его надо заменять на WET?

    ...
    > Здесь есть _одно_ использование функции, а значит осмысленно обобщить её не удастся. Зачем пытаться тогда совершить невозможное?

    Какое отношение всё это имеет к обсуждаемой функции? Какое обобщение? Я вообще об этом даже не заикался.

    > Типа в стандарте так написано, или ты на своей системе проверил, и решил, что так везде? Я лично не очень доверяю этому. Не знаю, почему.

    Вот вместо написания этих двух предложений лучше бы почитал стандарт и убедился. Люди уже гуглить обленились, дожили.

    > Достаточно один раз договориться

    Ну и как там процесс идёт? Разработчики библиотек между собой уже договорились? А с разработчиками приложений? А то здесь одни значения успеха, там другие, а потом это всё сходится в одном приложении и приходится каждый раз лазить в доки, потому что невозможно удержать в голове, какие из 200 используемых функций из разных библиотек придерживаются какого стиля.

    Вообще, я уже устал дискутировать, на остальное отвечать просто лень. Всё равно понятно, что здесь собрались эксперты мирового класса, мне таких не переспорить. ВСЁ, что я пишу, постоянно оспаривается, как будто из принципа, а собственные косяки мои оппоненты или замалчивают, или преподносят как истину. Видите ли, раньше все нормальные люди писали дефайны кодов ошибок, как в тех же *nix ОС, и это считалось правильно, а сегодня пришёл Аноним и заявил, что это - корпоративное уфло. Ну ок.

     
     
  • 6.76, Аноним (-), 20:04, 08/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Да, я знаю, именно поэтому мне пришлось об этом говорить Если рассмотреть функц... большой текст свёрнут, показать
     
     
  • 7.77, burjui (ok), 23:27, 08/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Так понятнее стало?

    Нет, мне не стало понятнее, с чего вдруг ты вообще заговорил про обобщение и выделение в функции. Вот представь себе, что мы обсуждаем температуру воздуха - например, при какой человеку комфортнее заниматься физкультурой, и я внезапно начинаю говорить о том, как важны пропорции кислорода и азота, ведь если бы кислорода стало не 21%, как сейчас, а 51%, мы бы все сгорели в глобальном планетарном пожаре. Мысль, безусловно, имеющая смысл, но не имеющая никакого отношения к обсуждаемой теме.

    > Вот ещё. Делать мне больше нечего.
    > Я не знаю почему, но в таких вопросах я привык доверять интуиции.

    Я искренне не понимаю: это такой тонкий троллинг, или ты на полном серьёзе сейчас кичишься своей безграмотностью в данном вопросе?

    > Усталось всегда возникает симптомом, когда сливаешь дискуссию.

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

     
     
  • 8.81, Аноним (-), 13:30, 09/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Я не знаю чем тут можно помочь Могу ещё попробовать так есть разные причины вы... большой текст свёрнут, показать
     
     
  • 9.82, burjui (ok), 13:45, 09/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Намного короче и понятнее, чем предыдущие портянки текста Более того, можно был... текст свёрнут, показать
     
     
  • 10.86, Аноним (-), 15:32, 09/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А, у тебя проблемы с длинными предложениями Надо простые писать Не осложнённые... большой текст свёрнут, показать
     
  • 4.78, Аноним (78), 10:50, 09/08/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > NULL в C - это просто ноль, приведённый к типу void*

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

    А с таким подходом ты можешь круто обосраться при переносе кода.

     
     
  • 5.79, burjui (ok), 13:10, 09/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Понятно, здесь не умеют гуглить. Так и быть, сделаю это за вас:
    https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf

    6.3.2.3 Pointers
    An integer constant expression with the value 0, or such an expression cast to type
    void *, is called a null pointer constant. If a null pointer constant is converted to a
    pointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal
    to a pointer to any object or function.

    Надеюсь, никто не будет спорить с тем, что "целая константа со значением ноль" не зависит от платформы.

     
     
  • 6.83, Аноним (69), 13:50, 09/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Теперь погугли, что делает calloc: кастует нулевые байты в нулевые указатели?
     
     
  • 7.84, burjui (ok), 14:03, 09/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Это уже все рамки разумного переходит.

    Во-первых, кастовать не обязательно: "An integer constant expression with the value 0, OR such an expression cast to type void *". Во-вторых, найди мне в стандарте место, где говорится, что указатель, которому присвоили ноль, может по воле компилятора оказаться не нулевым.

     
     
  • 8.85, Аноним (69), 14:16, 09/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Является ли блок из нулевых байтов An integer constant expression with the valu... текст свёрнут, показать
     
     
  • 9.87, burjui (ok), 14:03, 10/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Знаешь, а ты прав Я тут почитал доп инфу и понял, что могут быть архитектуры, ... текст свёрнут, показать
     
     
  • 10.89, Аноним (69), 15:02, 10/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Вот ты лучше расскажи своей логикой растомана Почему, записывая массив байтов и... текст свёрнут, показать
     
     
  • 11.91, burjui (ok), 20:46, 10/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Вообще-то, это обычная логика По-твоему, логично, что сущность с названием null... большой текст свёрнут, показать
     
     
  • 12.92, Аноним (69), 21:14, 11/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ты прочитал, что делает calloc Правильно Выделяет массив байт и обнуляет этот ... текст свёрнут, показать
     
  • 4.88, burjui (ok), 14:12, 10/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Итак, после обсуждения ниже выяснилось, что в C, когда имеешь дело с указателями, ноль может стать не нулём, а не ноль может быть равным нулю. Простой язык, говорили они. Ну что же, получается, с calloc я сел в лужу, и код принимает такой вид:

    int clearenv(void) {
        /* We would like to free previously set environment variables here,
         * but at least FreeBSD 5.1 doesn't let us */
        environ = malloc(sizeof(char*));
        if (environ)
            *environ = NULL;
        return environ ? CLEARENV_SUCCESS : CLEARENV_FAILURE;
    }

     
  • 3.75, Аноним (69), 16:13, 08/08/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Он как ыксперт по безопасным каракулям руст не разобрался в опасных каракулях си и увидел обнуление  после malloc, и хотел сказать, что ржавчина на серебряных пулях уничтожает таких монстров до полного обнуления.
     
     
  • 4.80, burjui (ok), 13:15, 09/08/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Очередной бессмысленный комментарий от очередного недалёкого анона. Бессмысленный он хотя бы потому, что оставлен уже после обсуждения того, что конкретно мне не нравится в коде. Я там факты привожу, почитай. Ты же умеешь читать код на C?
     

  • 1.68, Аноним (68), 18:03, 07/08/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ожидал всего что угодно, но такого. Они просто читают файл по относительному пути без каких либо проверок. Этот сервер писали школьники на уроках информатики?
     

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



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

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