Доступен корректирующий выпуск OpenSSH 9.9p1, в котором устранены две уязвимости, выявленные компанией Qualys. Продемонстрирован пример использования данных уязвимостей для совершения MITM-атаки, позволяющей при попытке подключения клиента к SSH-серверу, перенаправить трафик на собственный фиктивный сервер, обойти проверку хостовых ключей и создать у клиента видимость подключения к желаемому серверу (ssh-клиент примет хостовый ключ фиктивного сервера вместо ключа легитимного сервера)...Подробнее: https://www.opennet.me/opennews/art.shtml?num=62742
Нужен язык, который не позволяет оставлять алгоритмические ветки необработанными.
Хм.. кажется zig такое умеет.
Ну или V на крайняк.
Можно было бы сделать Safe-C, но кто ж этим будет заниматься.
Так Safe-C это же про выходы за границы буферов.
есть такой, но его тут хейтят, особенно те кто не могут осилить
> есть такой, но его тут хейтят, особенно те кто не могут осилитьBrainfuck чтоли? По принципу - не смогли написать ssh сервер - и дыр нет, зашибись? :)
Это какой?
Эталонный. https://www.phoronix.com/news/Torvalds-Override-On-Rust-Code
Давай уж не звезди, он не устраняет логические ошибки.PS Да вообще сомнительно, что такой язык возможен. Разве что, привлечение к этому AI поможет.
Ассемблер, шоле?
в данном случае достаточно было bool, но это СИ, и многое там просто потому что так договорились
Тпипизация в состоянии отследить и логические ошибки тоже. Особенно со всякими зависимыми типами и верифицированным кодом
Таких языков уже куча. Из относительно популярных: rust, haskell, ocaml. Восходят эти языки к восьмидесятым (SML), если не раньше. Но сишники как всегда не в курсе, что там вообще существует
Зачем?
Какую проблему это решит?
Я иногда пишу так что у меня есть куски которые по идее никогда не отработают.
Но если что то случится то в теории их срабатывание возможно :)
>Я иногда пишу так что у меня есть куски которые по идее никогда не отработают.Для таких вещей, как openssl не помешало бы и докзательство, но сишники не осилили даже алгебраические и афинные типы
Доказательство чего?А в ветки которые никогда не должны по идее выполнятся я могу напихать или abort() или логирование.
С язык не для алгебры.
Если вам нужны какие то там типы - берите и реализовывайте их самостоятельно или ищите готовую либу.
Нет смысла перегружать язык всевозможным мусором.
>Доказательство чего?Корректности кода
>я могу напихать или abort() или логирование.Вы случаем не любитель динамической типизации? Ну и что, что упадёт в рантайме?
>Если вам нужны какие то там типы - берите и реализовывайте их самостоятельно или ищите готовую либу.А софт с типами кто будет писать? Тот же ssh?
Для проверки корректности достаточно тестов.Мне всё равно какая там типизация.
Вы хотели работать с арифметикой, вот и работайте, для этого есть либы на С.
В коде openssh хватит и базовых типов доступных в языке.
>Для проверки корректности достаточно тестов.Тесты годятся для того, чтобы показать наличие ошибок, но не годятся для доказательства отсутствия этих самых ошибок (цитата)
>Вы хотели работать с арифметикойЕщё один сишник, увидев выражение алгебраический тип данных, решил, что это что-то с арифметикой связанное, даже не потрудившись посмотреть определние. Вас под копирку штампуют?
Алгебраический тип например
type 'a option =
| None
| Some of 'a
Делаете так, и NPE у вас болеть не будет
> Тесты годятся для того, чтобы показать наличие ошибок, но не годятся для доказательства отсутствия этих самых ошибок (цитата)Зависит от кода и тестов.
В остальном я не понял какую проблему вы этим решаете.
>Зависит от кода и тестов.Не зависит. Вы тестами никогда не покроете все возможные варианты. Если вам нужно сложить два байта, то вариантов будет 65536. Вы под каждый вариант будете тест писать?
>В остальном я не понял какую проблему вы этим решаете.Откройте поисковик и введите туда Null Pointer Exception. Только учтите, что в вашем си NPE нет, там это сразу UB.
>выделяется 256-байтовый буфер для формирования ответа, но данный буфер освобождается только после завершения согласования ключейНи какой даже самый безопасный ЯП не спасет от человеческой глупости.
> Первая уязвимость (CVE-2025-26465) вызвана логической ошибкойКниги по логике способны помочь человеку, но многие не хотят тратить время на их чтение и изучение.
> Книги по логике способны помочь человекуне способны
> Книги по логике способны помочь человекуАльберту Эйнштейну приписывают следующее высказывание:
"В мире есть всего две бесконечные вещи: Вселенная и человеческая глупость". А потом добавил: "Впрочем, на счет Вселенной я еще сомневаюсь"
Сомнительная отсылка к сомнительному авторитету.
СТО опирается на метрику поляка Минковского.
Именно у этого преподавателя учился физике указанный студент в Швейцарии.
А введённое этим студентом убирание знаков сложения и умножения в формулах просто феерично - тупо "лень писать каждый раз".
Минковский сопоставил СТО с псевдоевклидовой метрикой уже после создания самой СТО.
Типизация в состоянии отследить и логические ошибки тоже. Особенно со всякими зависимыми типами и верифицированным кодом
> проверяется только код ошибки "-1", а другие коды, такие как
> "-2", игнорируются. В итоге функция verify_host_key_callback()
> может вернуть успешный код "0", несмотря на возврат ошибки "-2"
> функцией verify_host_key().Это не логическая ошибка.
Это убогость обработки ошибок в сишечке в принципе.Если бы вместо -1, -2 и других ну совершенно очевидных значений, был бы нормальный enum, а на месте обработки exhaustive switch - то эту ошибку просто НЕВОЗМОЗМОЖНО было бы проигнолить - код бы просто не собрался бы.
> Это убогость обработки ошибок в сишечке в принципе.Это убогость программиста, в случае убогости сишечки, вы бы данный случай не переписали бы так, что проблема разрешилась бы.
> вы бы данный случай не переписали бы так, что проблема разрешилась бы.Вы фикс видели?
- xxx_conn_info) == -1)
+ xxx_conn_info) != 0)А теперь вопрос, если там будет >0, то что тогда?
> А теперь вопрос, если там будет >0, то что тогда?и сишечка вам не даст возможности что-либо сделать?
> и сишечка вам не даст возможности что-либо сделать?Наоборот!
Она даст тебе возможность сделать еще одну ошибку.
Можно подробнее, пожалуйста. Что-то не понял.
> Она даст тебе возможность сделать еще одну ошибку.Ошибку совершает человек!!!! причем тут сишечка?
> Ошибку совершает человек!!!! причем тут сишечка?В отрезанном пальце виновата работник, циркулярка или недоинженер, которых не спроектировал защиту?
Вот тут также. Виноваты все.
Причем работник тоже - он согласился работать на этом убожестве.
> которых не спроектировал защиту?не защиту в целом, а защиту от дурака, в этом могу согласиться.
> Причем работник тоже - он согласился работать на этом убожестве.
Тут главное инструкции безопасности. Ну представьте себе нож, который кроме хлеба ничего (физически) больше резать не может, возможен ли такой нож? Легче уж, испечь хлеб в "нарезанном" (порционном) объеме, чем бояться порезать палец при его нарезании опасным ножом. Вопрос широкий, что лучше в с точки зрения безопасности. А если мы ограничиваем гипотетический нож, который режет только хлеб, то мы должны придумать N других ножей на все случаи жизни. Отсюда и проблема типового исчисления, а бестиповому все по :)
если программист выбирает тип для данных, где количество допустимых значений равно 2^32, то он обязан описать условие на каждое из значений и не надеяться на, что там кроме 0 и 1
других значений не будет присвоено. Отсюда для облегчения и ввели оператор варианта с дефолтом.
> если программист выбирает тип для данных, где количество допустимых значений равно 2^32А других типов данных у него нет.
Можно было бы взять signed char дабы сузить количество вариантов, но принципиально это бы ни на что не повлияло бы.
> А других типов данных у него нет.ну тогда нужно использовать enum.
> Можно было бы взять signed char дабы сузить количество вариантов, но принципиально это бы ни на что не повлияло бы.
Принципиальным тут должно быть количество ЗНАЧИМЫХ тогда значений, из 2^8 - 2 значения. Но в новости у "успеха" (успешный результат функции) значение 0, а у "ошибки" значения -1, -2 и т.д. И проверка ведется на истинность "ошибки" (== -1), так кто убог? И поэтому переписали на (!= 0), ИСТИНА - если результат функции НЕ "успешен". И что будет если >0, все тоже - ИСТИНА, так как это не результат "успеха", ибо такая задумка программиста.
> ну тогда нужно использовать enum.Чем бы тебе помог сишный енам?
Вот пример с незахендренным кейсом godbolt.org/z/1eo7PjvcrВорнинг есть только у шланга. Для гцц нужно выставлять всякие флаги, вроде -Wall
А твоя софтина вообще не факт что соберется с -Wall )))
> Чем бы тебе помог сишный енам?Тем, что я явно описал все допустимые значения, а то что забыл проверить одно из них - проблема сишечки?
А что можно доверить человеку запомнить, со слабой памятью? - Ничего, ну и тут так же.
> Ворнинг есть только у шланга.
Как по мне, ворнинг там совсем не к месту. У меня переменная типа энам всегда однозначна определена. А с каким из значений энама я проверяю переменную, компилятор вообще волновать не должно.
И код там вполне корректный, если следовать логике "если нет совпадений со значением LOW или MEDIUM или HIGH - верни 0".
>А что можно доверить человеку запомнить, со слабой памятью? - Ничего, ну и тут так же.Сразу видно, что Аноним не работал с большими проектами, где часть кода написана другими людьми, или самостоятельно, но длительное время назад.
> где часть кода написана другими людьми, или самостоятельно, но длительное время назад.так конкретный кусок кода ответственный за ошибку пишет ведь один человек, не так ли?
> Сразу видно, что Аноним не работал с большими проектами
сразу видно, что не читали басен Крылова. А "багу" в новости считаю бекдором.
>так конкретный кусок кода ответственный за ошибку пишет ведь один человек, не так ли?И что, он весь проект знает? По вашему он убедт пять лет проект изучать, прежде чем патч на пять строк отправить?
> И что, он весь проект знает? По вашему он убедт пять лет проект изучать, прежде чем патч на пять строк отправить?оставлю ответ за тем кто "Сразу видно, что РАБОТАЛ с большими проектами", будьте добры, поясните Анониму, как пять строк добавляются к большому проекту.
>будьте добры, поясните Анониму, как пять строк добавляются к большому проекту.Добавьте пять строк к большому проекту так, чтобы нигде ничего в самом неожиданном месте не сломалось. Перечитайте весь код, от начала и до конца
>Чем бы тебе помог сишный енам?Си нужно закопать. А в нормальных языках есть сопоставление с образцом, на что и намекает человек выше. Если вам не нравится раст, возьмите хаскель или окамл, там это тоже есть.
> Си нужно закопать.нет!
Опять кто то кому то обязан.int часто берут и юзают как bool, просто потому что удобно и примерно понятно что оно станет регистром при вызове и потому что уж 2 то значения в себя уместит.
Никто не парится этими вашими типами и прочей чепухой, потому что это ничего не даёт.
>int часто берут и юзают как bool, просто потому что удобноВ си уже появился bool? Когда успел?
>>int часто берут и юзают как bool, просто потому что удобно
> В си уже появился bool? Когда успел?с С99.
stdbool.h
Не знаю когда, это не та часть которая меня интересует :)
Скорее всего просто сперва написали что может быть только 0 в случае удачного завершения и -1 в случае неудачного. А потом кто-то дописал патч на проверку памяти и решил чтобы отличить такую ситуацию возвращать -2. Ну а проверку возвращаемых значений никто не проверил. Вот и результат.
с точки зрения логики, функция должна возвращать либо успех (истина), либо не успех (ложь), третьего не дано по закону исключенного третьего. Но архитектурно, понятия возвращаемого значения функции нет. Можно было бы сделать дополнительный флаг в регистре флагов, за которым закреплялось бы логическое 1 - успешно, 0 - неуспешно, которое устанавливалось бы до инструкции возврата (ret) и сбрасывалось в 0 при вызове (call).
А с точки зрения математики, функция y=f(x) — соответствие между двумя множествами, при котором каждому элементу одного множества соответствует элемент другого.Как-то так. Надеюсь суть возражения понятна.
> Как-то так. Надеюсь суть возражения понятна.То что вы описали, это область значений функций, и я не отменял их, допустимо и соответствие с пустым множеством значений, что равносильно процедуре, которая не возвращает значение. Ведь архитектурно, о возвращаемом значение ничего не говорится, только принимается по общему согласию (Calling convention). Архитектурно, все функции это процедуры, при call кладут на стек адрес следующей инструкции, делают прыжок по адресу процедуры, и по ret прыгают по адресу лежащему на вершине стека. Я предлагаю архитектурно добавить логический флаг (TF - truth flag) "успешности (истинности) процедуры (функции)" и опкоды типа STS - set TF flag 1, CLT - clear TF flag, JT - jump if TF=1 и т.д. И не вижу никаких проблем.
Архитектурно уже есть варианты. Например с использованием исключениям, когда функция специальным способом сообщает вызываемому коду, что она завершилась с ошибкой.Ещё возврат «пары», где первый член это, условно, индикатор успешности выполнения функции, а второй — результат функции или что за ошибка.
Ну или просто возврат целого числа, где возврат 0 это норм, а всё остальное — код ошибки. Кто писал на bash'е, тот знает.
В общем, предлагать, что должен быть только какой-то один способ, так себе задумка.
Это соглашение, которое решается на уровне команды, пишущей код проекта или эти… как их… стандарты принятые на уровне организации, по типу сколько пробелов отбивать для вложенности и в каком регистре писать имена переменных.
Ну, а если кто-то нахватал кусков отовсюду и возмущается, что тут так, а там эдак, и, поэтому, у него получается перейти в состояние дзен-кодирования, то ладно, бывает, все когда-то начинали программировать. ;-)
Коррекция:«…с использованием исключений, …»
«…не получается перейти в состояние…»
>каждому элементу одного множества соответствует элемент другогоДвоешник.
Функция y=mod|10|(x)
Значению y=5 соответствует какое значение х = 5, 25 или 55?
А чё не y=x^2 при y=4?Цитата из одной из энциклопедий, ближе к концу статьи:
«Часто под термином «функция» понимается числовая функция, то есть функция, которая ставит одни числа в соответствие другим. Эти функции удобно представлять в виде графиков.»
Это, то что я имел ввиду про функцию в математике. Ну будет, у тебя «пила» на графике, что не так-то?
Ещё там есть такое, самое первое:
«Фу́нкция в математике — соответствие между элементами двух множеств — правило, по которому каждому элементу первого множества, называемого областью определения, соответствует один и только один элемент второго множества, называемого областью прибытия.»
Выделю «соответствует один и только один элемент». Но я в исходном сообщение это не подразумевал.
Я лишь возразил что, что такое функция, понимается по разному с разных точек зрения, следовательно могут быть и разные требования к их реализации.
Можно конечно ввести госты/стандарты на оформление функций и строго следить за их соблюдением. Но это будет сродни предложению осуществлять крепёж деталей только забиванием. Придёт некто и скажет: «А у меня шурупы/болты/саморезы. !?» «Ничего не знаем, по госту сказано забивать, значит забивайте».
> Двоешник.А в чем проблема то?
Утверждение "каждому элементу одного множества соответствует элемент другого" верно с небольшим дополнением."""
каждому элементу множества определений функции (Х большое) соответствует элемент другого множества значений функции (Y большое)
"""X -> Y
и х = 5, 25 или 55 -> y=5
5, 25, 55 принадлежат X, 5 принадлежит Y.
пс: утверждение об одно-однозначном соответствии никто не утверждал!
> либо успех (истина), либо не успех (ложь), третьего не дано по закону исключенного третьегоЕсть ещё отсутствие результата, nil. Но для того, чтобы это понять надо думать не как кодер, а как программист.
> Есть ещё отсутствие результата, nil.Ну в таком случае мы говорим об логической успешности или не успешности функции?
В том то и дело что неуспех может быть разный. Может неверные параметры пришли или что-то случилось что требует дополнительной обработки. Вот и пользуются таким способом.
> В том то и дело что неуспех может быть разный.Да и логика бывает разной, для классической допустим закон исключенного третьего, для конструктивной - нет. Но функции бывают не только "результативные по количеству", но и логические, где результат этой функции это логическая либо истина, либо ложь. К таким функция можно отнести все логические функции, функции выделения ресурсов, функции контроля, проверки доступа и т.д. Архитектурно этого нет, есть тупо процедура call/ret, и все "передаваемые-возвращаемые" параметры реализованы по соглашению.
"Ничего не будет и это жизнь".
0 является типовым кодом "нет ошибок" в коде на Си.
А все, что не ноль, то ошибка (кроме функций типа read()).
> А теперь вопрос, если там будет >0, то что тогда?Ошибкой будет считаться всё, что не 0.
> Если бы вместо -1, -2 и других ну совершенно очевидных значений, был бы нормальный enum, а на месте обработки exhaustive switch - то эту ошибку просто НЕВОЗМОЗМОЖНО было бы проигнолить - код бы просто не собрался бы.Да лана, просто проверяешь <0 и всё. Switch же это не обязательная конструкция, так что ошибку можно тоже допустить.
> Да лана, просто проверяешь <0 и всё.Та если бы.
Вот фикс github.com/openssh/openssh-portable/commit/0832aac79517611dd4de93ad0a83577994d9c907Они просто позабывали выставить ошибки
r = SSH_ERR_INVALID_FORMAT;
перед вызовом goto out;Тут вообще все прекрасно))
И goto, и забытые ошибки, и неинициализированная "int r;", и фикс вида
- xxx_conn_info) == -1)
+ xxx_conn_info) != 0)
> Да лана, просто проверяешь <0 и всё.А потом какая-то "светла голова" например решит, что "0" это тоже нормально для ошибки.
Ну если такое значение не валидно.> Switch же это не обязательная конструкция, так что ошибку можно тоже допустить.
Да про всё что угодно можно сказать "не обязательная конструкция".
Например про проверки входных данных или размеры массивов)
> Да про всё что угодно можно сказать "не обязательная конструкция".
> Например про проверки входных данных или размеры массивов)Если ошибка может быть допущена, то она будет допущена. Закон Мерфи же.
> Если ошибка может быть допущена, то она будет допущена. Закон Мерфи же.Отказываемся от светофоров, изоленты и ТБ на производстве))?
Ну типа если человек захочет себе выстрелить в ногу он это сделает?Или сделаем так, чтобы ошибка "не могла быть допущена" или хотя бы "чтобы допустить ошибку тебе придется попотеть" ?
>> Если ошибка может быть допущена, то она будет допущена. Закон Мерфи же.
> Отказываемся от светофоров, изоленты и ТБ на производстве))?Нет, просто отказываемся от преувеличений и абсолютизации. Если придерживаться ТБ, то аварии не станут НЕВОЗМОЖНЫ[1], они просто будут реже происходить.
1. https://www.opennet.me/openforum/vsluhforumID3/136057.html#8
> Нет, просто отказываемся от преувеличений и абсолютизации. Если придерживаться ТБ, то аварии не станут НЕВОЗМОЖНЫ[1], они просто будут реже происходить.
> 1. https://www.opennet.me/openforum/vsluhforumID3/136057.html#8Думаю это уже лучше чем полагаться на авось)
Т.е если вернуться к теме обсуждения - то:
1. сделать вместо убогих интов, нормальную ошибку (енум, структура и тд).
2. посадить компилятор бить пограммистов по корявкам за написание плохого кода (ну или просто кибербуллить в интернете)
> посадить компилятор бить пограммистов по корявкам за написание плохого коданет, нет и трижды нет, пусть компилятор занимается лучше оптимальной кодогенерацией.
> нет, нет и трижды нет, пусть компилятор занимается лучше оптимальной кодогенерацией.В итоге, ошибки на Си - самые оптимизированные. Так и живем.
> Так и живем.Если бы компилятор бил бы всегда по рукам за логические ошибки, то это был бы не компилятор, а целый верификатор (прувер корректности), и программы ваши были бы не просто программами, а - формальными спецификациями. И я бы посмотрел бы сколько усилий надо было бы приложить, чтобы компилятор "не ругался" :) И такие "компиляторы" (верификаторы) есть, а че на них никто не пишет? Выходит, нам не компилятор, который бьет по рукам, нужен, а "компилятор", который за нас корректно составит программу.
пс: Вы, и за меня их есть будете? - Ага :))
>> Нет, просто отказываемся от преувеличений и абсолютизации. Если придерживаться ТБ, то аварии не станут НЕВОЗМОЖНЫ[1], они просто будут реже происходить.
>> 1. https://www.opennet.me/openforum/vsluhforumID3/136057.html#8
> Думаю это уже лучше чем полагаться на авось)
> Т.е если вернуться к теме обсуждения - то:
> 1. сделать вместо убогих интов, нормальную ошибку (енум, структура и тд).
> 2. посадить компилятор бить пограммистов по корявкам за написание плохого кода (ну
> или просто кибербуллить в интернете)Программисты всё равно найдут способ совершить ошибку, а сильно умный компилятор создаст кучу проблем в куче случаев, когда ошибки нет.
> Программисты всё равно найдут способ совершить ошибку,Бездоказательное утверждение.
А вот примеры с ПДД, ПУЭ, ТД, СНиП и прочими регулированиями - говорят обратное.
Можно даже МИСРА вспомнить - а там правила весьма жесткие.
Но это для серьезного софта, зачем либе для шифрования надежность.> а сильно умный компилятор создаст кучу проблем в куче случаев, когда ошибки нет.
Для этого случая можно придумать какое-то ключевое слово "что хочу то и ворочу" отключающее проверки.
Тут же главное чтобы всреднеми ситуация улучшилась - как с дорожным движением, понятно что найдутся удаки которые будут 150 по встречке ехать, но таких будет меньшинство.
> А вот примеры с ПДД, ПУЭ, ТД, СНиП и прочими регулированиями -
> говорят обратное.Как раз наоборот, примеры говорят о том, что аварии никуда не делись, люди гибнут тысячами не смотря на ПДД, ПУЭ, ТД, СНиП. Избавиться от аварий полностью слишком дорого и непрактично. В реальной жизни мы миримся с тем что какая-то часть людей погибнет или станут калеками. Это нормально, потому что мы не хотим слишком дорогой или неудобный транспорт. То что стоит недорого, не слишком снижает комфорт и снижает смертность внедряется. Но есть бюджет, за который ты не вылазим.
> Тут же главное чтобы всреднеми ситуация улучшилась - как с дорожным движением,
> понятно что найдутся удаки которые будут 150 по встречке ехать, но
> таких будет меньшинство.Это хорошо, с этим никто не спорит. Но только если это будет удобно, комфортно, недорого и не будет тормозить.
>Программисты всё равно найдут способ совершить ошибкуОшибки, если это не бекдоры, никто не ищет как совершить. На проводах изоляция не потому, что резину некуда деть, а для того, чтобы можно было касаться провода в произвольном месте.
>>Программисты всё равно найдут способ совершить ошибку
> Ошибки, если это не бекдоры, никто не ищет как совершить. На проводах
> изоляция не потому, что резину некуда деть, а для того, чтобы
> можно было касаться провода в произвольном месте.Тем не менее тыщи людей регулярно гибнут от поражения током.
> Тем не менее тыщи людей регулярно гибнут от поражения током.мы даже можем сказать, что они прочли правила техники безопасности, мы же не можем просто взять и положить кому-то в голову какие-то знания. Одни после прочтения сами кладут эти знания в голову, а другим необходим "удар током" - условный рефлекс.
>Тем не менее тыщи людей регулярно гибнут от поражения током.И? От изоляции проводов уже отказались?
>>Тем не менее тыщи людей регулярно гибнут от поражения током.
> И? От изоляции проводов уже отказались?Нет, применяют там где это уместно и удобно. Но даже там где применяют люди находят способ обойти защиту и погибнуть.
>сделать вместо убогих интов, нормальную ошибку (енум, структура и тд).Это в виндовс стиле будет получается. Так точно можно в опенсурс проэктах?
> Это в виндовс стиле будет получается.эт шо за стиль такой? где этому учат? :)
А что не так с фиксом?
> Если бы вместо -1, -2 и других ну совершенно очевидных значений, был бы нормальный enum, а на месте обработки exhaustive switchЩа, ещё 20 лет подождём, когда можно будет хотя бы посчитать нормально количество констант в енуме, или хотя-бы built-in тип в gcc для таких действий, и возможно к тому времени уже и jai релизнется.
Анониму слишком сложно работать с цифрами. Работать с цифрами - это всё равно что читать книжку без картинок.
Поэтому сишечка убогая.
Да не нужен никому ваш енум, успокойтесь уже.
Меня вот например интересует ситуация когда там -3 только возвращается откуда то, на болту я вертел писать все 100500 енум значений в свитч.
>Меня вот например интересует ситуация когда там -3 только возвращается откуда то, на болту я вертел писать все 100500 енум значений в свитч.Явное лучше неявного.
match var_name with
| Some3 -> do_code ()
| _ -> ()
Какие то каракули.
Сразу видно сишного кодера - он только си читать умеет. Вот знай вы ещё один язык - сразу сишным кодером перестанете быть
Да вот только вы написали этими каракулями аналог:
if (-3 == some_var) {
do_code();
}чем вы там в своих каракулях гордитесь - мне решительно не понятно: много буков и чёрточек со стрелочками вместо простой и понятной записи.
>Да вот только вы написали этими каракулями аналог:Нет, не аналог. Есть условный код на ocaml
type some_result =
| Success
| Err1
| Err2
Далее, когда программист пишет код, он думает, является ли эта ситуация исключительной или нет. Если он пишет обработку ошибок, то он пишет
let func1 () =
match func0 () with
| Success -> do_success ()
| Err1 -> do_err1 ()
| Err2 -> do_err2 ()
А если ему нужно обработать только Err2, то он пишет как в примере выше
let func2 () =
match func0 () with
| Err2 -> err2_only ()
| _ -> ()
Далее, кто-то вводит новый тип Err3, и компилятор сразу проверяет, где этот тип обрабатывается, а где - нет. И скажет: вот в примере func1 вариант Err3 обработать забыли. Если же в си добавят новый тип ошибки, то нужно перелопатить весь код вручную
>чем вы там в своих каракулях гордитесь - мне решительно не понятноЯвное лучше неявного. Вот авторы openssh не обработали -2 - это баг или фича? В языках с алгебраическими типами данных есть правило хорошего тона, когда используется исчерпывающее перечисление.
>много буков и чёрточек со стрелочками вместо простой и понятной записиВместо того, чтобы говорить о семантике кода, вы говорите о синтаксисе. Не надо так.
Никто не упарывается писать как в func1.> Вместо того, чтобы говорить о семантике кода, вы говорите о синтаксисе. Не надо так.
Уже говорил: мне важен результат, а не фричество с языком.
>Никто не упарывается писать как в func1.Совершенно верно сишники/плюсовики/гошники так не пишут. А сторонники rust/haskell/ocaml - пишут. За это я и не люблю код на си.
Запомни раз и навсегда, может быть перестанешь быть убогим, switch - это прошлый век.
В switch'е иногда требуется сделать fallthrough. А когда ты это сделал, последователи могут этого не заметить и своими кривыми руками сломать весь switch. Такие онанимы-доброжелатели лесом.
Эх, помню те времена dial-up'а, когда ставил на чердаке сниффер на соседские телефонные линии, слушал их и мониторил трафик 😊
А я в эфире при помощи тюнера AverMedia пейджинговые сообщения читал, когда в общаге жил в начале нулевых - весёлое времечко было!
> А я в эфире при помощи тюнера AverMedia пейджинговые сообщения читал,
> когда в общаге жил в начале нулевых - весёлое времечко было!О сколько нам открытий чудных готовит... rlt_sdr и режим монитора вафли!
> режим монитора вафлиТ.е. ты изобрёл клиентскую точку доступа? Поздравляю.
> Т.е. ты изобрёл клиентскую точку доступа? Поздравляю.Я не изобретал режим монитора. И он таки - про то чтобы посмотреть "а что вокруг?". И, возможно, найти что-то интересное.
rlt_sdr наш друг
> весёлое времечко былоДа, много чего можно было делать вообще не непрягаясь. Потому что все данные гнались без шифрования. Как по воздуху, так и по проводам.
>В базовой поставке OpenSSH данная опция по умолчанию отключена, но до марта 2023 года была включена в настройках ssh во FreeBSD.Очень типичная для FreeBSD ситуация, насколько мне известно: https://vez.mrsk.me/freebsd-defaults#openssh
Интересное чтиво с попыткой в анализ :)Но совет переходить на libressl увы плохой.
Я сидел на libressl более трёх лет, и это вызывало постоянные проблемы: приходилось самому поддерживать ряд портов. Те конфигурацию когда порт собирается с не дофолтным опенссл вообще никто не тестирует, кроме пользователей этого самого.
У меня это отлимало довольно заметно времени и с января 2024 я ушёл на дефолтный опенссл ибо не нанимался, что называется, бесплатно это суппортить.
machdep.hyperthreading_allowed="0" - тоже скорее вредный совет.Ну и далее там тоже много спорного.
> до марта 2023 года была включена в настройках
> ssh во FreeBSD.Главные безопасТнички опеннета таки - получили свое.
>> проявляется начиная с выпуска OpenSSH 6.8p1 (декабрь 2014 г.)Как же хорошо бэкдор замаскировали, что он успешно проработал 10 лет!
Хм, явный косяк с обработкой ошибок, но все почему-то заагрились на сишку. А что, в других языках уже нет способа забить болт на обработку ошибок?
У этой правки есть имя и фамилия, это он "ненужен", а не Сишка.
>Хм, явный косяк с обработкой ошибок, но все почему-то заагрились на сишку.Сишке уже полстолетия, а сишники до сих пор ничего не знают ни про алгебраические типы данных, ни про сопоставления с образцом, ни про что-то другое. Как и ожидалось от сишников.
Потому что это все чушь собачья.
Показывайте свой код, проведём рецензию. Надеюсь вы настоящий сишник и у вас есть кривой xml парсер?
У нормального админа и так все что тут упоминалось в конфигах покручено, ибо это мастхэв по сути.
А кто там на святых дефолтах живёт - ССЗБ.
>У нормального админаНанимать профессионального админа для локалхоста?
На локалхосте вы можете и не запускать ссш сервер или забить на возможные проблемы.
А как пользователь консольного ssh могли бы и почитать конфиг.
>На локалхосте вы можете и не запускать ссш серверУниверсальный ответ растоненавистников. Перила делать не нужно, ведь можно же не ходить на второй этаж! Всем жить в одноэтажных домах. Гениальная мудрость дидов.
> Универсальный ответ растоненавистников. Перила делать не нужно, ведь можно же не ходить
> на второй этаж! Всем жить в одноэтажных домах. Гениальная мудрость дидов.Вас ненавидят в основном за то что вы при отсутствии своих достижений - пыжитесь даунплеить других. Вам freehck все правильно сказал - вы сами виноваты в таком восприятии хруста и хрустиков. Выглядит как куча агрессивных ламеров. И конечно куча ламерюк с серебреной пулей сделает безопасно, аж два раза.
>Вас ненавидят в основном за то что вы при отсутствии своих достиженийА откдуа вы знаете, кто я? Я между прочим против rust, поскольку в нём нет зависимых типов, а это важно для системного программирования. А так, я за Ocaml.
>вы сами виноваты в таком восприятии хруста и хрустиковРастовики - приятная компания, чтобы троллить сишников, они такие забавные. Кстати, у вас есть кривая реализация xml парсера, или вы ненастоящий сишник?
Вы не хотите неприятностей, при этом не хотите сами разбиратся и не хотите платить админу вашего локалхоста, в таком случае вам остаётся либо не использовать софт либо не включать компьютер либо *роскомнадзор*, я преложил самый мягкий вариант.На что вы рассчитываете?
Что в бесплатном софте (а хоть бы и в платном) за вам всё задарма сделают по высшему классу?
У меня банальный вопрос. Вот у меня на домашнем ПК стоит Дебиан. Я обновляю этот openssh-client с 1:9.9p1-1 до 1:9.9p2-1. Я должен перезагрузить ПК (или сеанс), чтобы изменения вступили в силу?
Проще всего перезагрузить
> У меня банальный вопрос. Вот у меня на домашнем ПК стоит Дебиан.
> Я обновляю этот openssh-client с 1:9.9p1-1 до 1:9.9p2-1. Я должен перезагрузить
> ПК (или сеанс), чтобы изменения вступили в силу?Если вы чайник - то перезагрузите. Если не чайник - просто рестартаните сервис.
у него клиент, какой сервис то надо перезапустить? openssh-server не запущен же.
ну только если у него активная сессия (соединение) с каким то сервером по ssh, то надо завершить соединение и подключиться заново.
>у него клиент, какой сервис то надо перезапустить?Откуда вы знаете? Может у него autossh в виде демона висит.
Те кто хейтят Си, просто не понимают, что язык выполняет ровно то, что написано. Глупо хейтить язык по причине глупости программистов. И люди умнее не станут, от очередной серебряной пули. Дойдет до того, что нейросеть будет писать код, а как оно там все работает никто знать и не будет.
>Те кто хейтят Си, просто не понимаютСи плох тем, что компилирует любой г-код. Хороший компилятор не будет компилировать г-код, он выдаст ошибку
Хороший программист включает ворнинги, и главное читает их. Шланг, например, предупреждает про use_after_free
>Шланг, например, предупреждает про use_after_freeВ самых тривиальных случаях. В реальном коде он это не обнаружит