The OpenNET Project / Index page

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

Проект Curl избавился от использования функции strcpy в коде

31.12.2025 09:39

Дэниел Cтенберг (Daniel Stenberg), автор утилиты для получения и отправки данных по сети curl, объявил о прекращении использования функции strcpy() в кодовой базе проекта и запрете применения данной функции в дальнейшем. Решение является продолжением инициированного в прошлом году отказа от использования функции strncpy(), копирующей заданное число байт из входящей строки. Применение strncpy() создавало опасность возникновения ошибок из-за пропуска нулевого символа в конце строки или добавочного заполнения нулями.

Обращения к strncpy() были заменены на функцию strcpy(), перед вызовом которой выполнялось выделение памяти под целевой буфер c учётом размера исходной строки или присутствовала проверка соответствия размера исходной строки и целевого буфера. Замена на функцию strlcpy() не была произведена, так как требовалось всегда копировать всю строку целиком или возвращать ошибку.

Теперь все вызовы strcpy() заменены на новую функцию curlx_strcopy(dest, dsize, src, slen). Функция curlx_strcopy() требует указания размера исходного и целевого буфера с расчётом, что целевой буфер обязательно должен быть больше исходного для вмещения нулевого символа конца строки, который принудительно добавляется функцией в конец для исключения его пропуска при копировании. Если размер целевого буфера больше нуля, но его недостаточно для копирования целевой строки, то в начало добавляется нулевой байт.


   void curlx_strcopy(char *dest,
                   size_t dsize,
                   const char *src,
                   size_t slen)
   {
     DEBUGASSERT(slen < dsize);
     if(slen < dsize) {
       memcpy(dest, src, slen);
       dest[slen] = 0;
     }
     else if(dsize)
       dest[0] = 0;
   }

Замена strcpy() на curlx_strcopy() произведена, так как существует вероятность человеческой ошибки, приводящей к разделению кода с проверкой/выделением памяти и вызовом strcpy(), например, при необдуманном переносе лишь части кода или вставки кода между проверкой и вызовом strcpy(). Кроме того, прекращение использования strcpy позволит избавиться от потока ложных сообщений об уязвимостях из-за некорректных срабатываний AI-инструментов, считающих наличие strcpy() уязвимостью без учёта имеющихся в коде проверок.

  1. Главная ссылка к новости (https://daniel.haxx.se/blog/20...)
  2. OpenNews: Утилита wcurl принята в состав проекта Curl
  3. OpenNews: Доступны утилиты wget 1.25 и Curl 8.11. Представлены платные LTS-выпуски Curl
  4. OpenNews: Проблемы из-за подготовленных AI-инструментами отчётов об уязвимостях
  5. OpenNews: Переполнение буфера в curl и libcurl, проявляющееся при обращении через SOCKS5-прокси
  6. OpenNews: В CVE опубликованы отчёты о ложных уязвимостях в curl, PostgreSQL и других проектах
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/64532-strcpy
Ключевые слова: strcpy, curl
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (213) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Ilnarildarovuch (?), 10:12, 31/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Молодцы, хорошее и safe изменение!
     
     
  • 2.20, Аноним (20), 11:35, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +18 +/
    Очень affordable
     
     
  • 3.89, Аноним (89), 14:26, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +6 +/
    И что только сишники не наворотят, лишь бы паскаль не изучать.
     
     
  • 4.94, Аноним (94), 14:33, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Утомительны эти ваши begin/endы.
     
     
  • 5.126, Аноним (126), 15:43, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    С разморозкой! Они проставляются современными редакторами кода автоматически. И уже очень давно.
     
     
  • 6.130, Анлним (?), 15:54, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Каеф. Бесполезные символы (как и {}) прославляются автоматически, вместо того чтобы просто от них избавиться
     
     
  • 7.168, Илья (??), 20:53, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А альтернатив-то и нет.
     
     
  • 8.216, Аноним (216), 01:54, 01/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Почему нет А как же питон ... текст свёрнут, показать
     
  • 5.213, Аноним (89), 00:43, 01/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Утомительны эти ваши begin/endы.

    Ага, лучше CVE строчить про переполнение буферов.

     
  • 4.118, Аноним (-), 15:16, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В современном паскале страшный зоопарк строк. Там есть алиас string который компилятор заменяет на ansistring (однобайтовые символы + кодировка) или widestring (двухбайтовые ютф) или shortstring(это как первые только не длинее 255 символов и длина в первом байте). И есть ещё указатели на соответсвующие типы символов для каждой строки, которые могут указывать на целую строку пока не встретится нулевой (крч, логика как в си). В чистых паскалевских проектах строки вообще не доставляют проблем, но вот когда нужно выйти из манямирка и обратится к библиотеке на си, то строки сразу прекращаются в ужс-ужс череватый сегфолтами.
     
     
  • 5.148, Ivan (??), 17:40, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Я там игрался немного. UTF-8 внутри ansi string представляется идеальным вариантом. Для legacy проектов, завязанных на широкие символы как-в-Винде (Free Vision, например, зачем-то именно так портировали) — wide string.

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

     
     
  • 6.149, Ivan (??), 17:44, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > внутри ansi string

    и
    UTF8Length(s);
    UTF8Copy(s, 1, 5);
    и т.д.

    , я, кстати, попросил перенести их из lazarus в стандартную библиотеку, и они перенесли

     
  • 4.165, Аноним (165), 20:03, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Верно. Кто о чем, а сишники все буфер считают, вместо того, чтобы праздновать Новый год)

    Так что в кафешках их днём с огнём не сыщешь)

     
  • 2.56, Аноним (56), 13:33, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А всего-то нужно было Кернигана-Ритчи прочитать.
     
     
  • 3.71, Аноним (71), 13:55, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +6 +/
    И иконку перед монитором чтобы она защищала написанный код.
     
  • 3.102, seg (?), 14:43, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Теперь хотя бы понятно за что сишников хейтят. А все как всегда - не читал, но проповедую.
     
     
  • 4.117, Вася (??), 15:15, 31/12/2025 Скрыто ботом-модератором     [к модератору]
  • +3 +/
     
     
  • 5.133, Аноним (133), 16:27, 31/12/2025 Скрыто ботом-модератором     [к модератору]
  • +/
     
     
  • 6.183, Аноним (183), 22:33, 31/12/2025 Скрыто ботом-модератором     [к модератору]
  • +1 +/
     
  • 2.141, Тон (?), 16:51, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Смотря какой fabric
     
  • 2.172, anonymous (??), 21:32, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Когда уже строки вместо указателей сделают?
     

  • 1.3, Bottle (?), 10:19, 31/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    А могли бы использовать C++ и не пилить велосипед со строками...
     
     
  • 2.9, Аноним (9), 10:45, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    а могли бы использовать питон и не заморачиваться вообще, а могли бы заплатить денег индусам и им бы все накодили, а могли бы найти гадалку чтобы она им искала ошибки через спиритические сеансы, ....сколько возможностей упущенно, ай яй яй
     
     
  • 3.66, Аноним (56), 13:46, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >  а могли бы заплатить денег индусам и им бы все накодили

    Ради того, чтобы строку скопировать в другую строку? Им (плательщикам) уже ничто не поможет.

     
  • 3.169, Илья (??), 20:55, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >питон

    Упаси госпаде

     
  • 2.11, Аноним (-), 10:53, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –9 +/
    Поясню, программирование на чистом Си похоже на поэзию. Когда вы пишите стихи, люди жившие до вас много раз писали о том, о чём пишите Вы. Но данный факт не является причиной того что не надо писать стихи.

    Что касается технической стороны, C++ не нужен. В учебниках и Интернете много всяких идиом и готовых функций на Си, которые программист может тупо пере-использовать. А если программсит напишет свою функцию, тоже неплохо. Во всяком случае это называется свободный выбор, а не велосипед.

     
     
  • 3.57, Аноним (94), 13:34, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Программирование на чистом Си похоже на письмо по слогам.
     
     
  • 4.60, Zulu (?), 13:39, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Самурай без меча подобен самураю с мечом, но без меча.
     
     
  • 5.84, Аноним (94), 14:14, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Но не все хотят быть самураями. Поэтому сейчас для микроконтроллеров мало кто пишет на ассемблере.
     
  • 3.59, Аноним (56), 13:37, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Поясню, программирование на чистом Си похоже на поэзию.

    Абсолютно согласен. Мне напоминает Маяковского и Блока. Причем эстетика, внешний вид текста - основа всего остального.
    Но есть отдельные личности, которые из совершенного инструмента делают непотребство (с примером можно ознакомиться в соседней теме), а в случае неизбежной неудачи обвиняют инструмент.

     
     
  • 4.73, cnjzxir (?), 13:57, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Можно примеры?
     
  • 4.82, Аноним (-), 14:11, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Абсолютно согласен. Мне напоминает Маяковского

    Для написания на СИ тоже нужно быть куколдом и плаксой?

    > Причем эстетика, внешний вид текста - основа всего остального.

    Т.е главное как оно выглядит, как работает уже не важно))?

    > Но есть отдельные личности, которые из совершенного инструмента делают непотребство (с примером можно ознакомиться в соседней теме),

    Т.е все СИшники.
    Глупейшие ошибки встречаются в ядре линукс, криптографичечких библиотеках (ssl/ssh), стандартных библиотеках (glibc), просто библиотеках (libxml, libwebp), шрифтах (freeType), утилитах (curl, sudo) ...

    Возможно где-то есть НАСТОЯЩИЕ СИшники, но очевидно код они не пишут.

    > а в случае неизбежной неудачи обвиняют инструмент.

    Если неудача неизбежна, то возможно инструмент овно)?


     
     
  • 5.99, Аноним (-), 14:38, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Т.е главное как оно выглядит, как работает уже не важно))?

    Зачем передёргиваешь, он об этом не говорил.

    >Глупейшие ошибки встречаются в

    Ой не надо так драматизировать, ошибки исправляются.

    >Если неудача неизбежна, то возможно инструмент овно)?

    Кен Томпсон с тобой не согласен. Си это замечательный инструмент.

     
     
  • 6.170, Илья (??), 21:04, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >Кен Томпсон с тобой не согласен

    А можно хотя бы парочку несогласных?

     
     
  • 7.196, Аноним (196), 23:28, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Контраргументов нет. Поэтому пошло хамство.
     
  • 6.182, Аноним (-), 22:33, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Ой не надо так драматизировать, ошибки исправляются.

    Надеюсь ты такого не услышишь от своего врача или мамы))

    Да, они исправляются, но главное что они допускаются.
    Постоянно и года в год, одни и те же.

    > Кен Томпсон с тобой не согласен. Си это замечательный инструмент.

    Настолько, что Кен свалил в гугл и запилил Го.
    А так да, замечательный!
    Особенно если на нем перестать писать.

     
     
  • 7.198, Аноним (196), 23:32, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >Надеюсь ты такого не услышишь от своего врача или мамы))

    Так тебе уже говорили - не драматизируй.

    >главное что они допускаются.
    >Постоянно и года в год, одни и те же.

    А ты чо хотел живой язык - живые люди. только в мёртвом языке ошибок нет.

    >Настолько, что Кен свалил в гугл и запилил Го

    Кена попросили написать Go. Тупые программисты Google оказываются не умеют в системное программирование. А микроконтроллеры, и вообще системщину он пишет только на Си.

     
  • 4.85, Аноним (94), 14:19, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Си и эстетика... сомнительно совместимые понятия. Но Раст, в этом плане, ещё хуже.
     
     
  • 5.142, Аноним (142), 16:58, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Скажите, какой ЯП по-вашему эстетичен?
     
     
  • 6.171, Илья (??), 21:04, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    С#
     
     
  • 7.218, Rezzet (??), 02:10, 01/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Может быть С# или Go или Пистон эстетичны и лаконичны, но это только если не вдаваться какая дичь там под капотом творится и что сначала им нужен их рантайм(или виртуальная машина) и уже потом они будут исполняться и простые строчки кода будет превращаться в тонны и трилионы процессорных инструкций, а потом еще прийдет сборщик мусора и скажет: "подожжжжждите, я поработаю" и в итоге ваша лаконичная и красивая программа превращается в неизвестно что с точки зрения инструкций процессора. Поэтому на Си/С++ писали, пишут и будут писать столько сколько существует плюс/минус текущая архитектура процессоров(не важно АРМ или х86, или Риск ) все они плюс минус похожи и при определенной сноровке и понимания процесса можно глядя на Си/С++ код понять в какой набор инструкций он будет разворачиваться. По сути Си/С++ это более человеческий способ писать на ассемблере.
     
     
  • 8.229, Илья (??), 07:32, 01/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Питон да, отвратителен во всех смыслах Весь рантайм у С - сборщик мусора Это ... текст свёрнут, показать
     
  • 2.13, xPhoenix (ok), 11:05, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –5 +/
    Рано или поздно и curl на Rust перепишут.
     
     
  • 3.15, Ilnarildarovuch (?), 11:12, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +4 +/
    И это будет отвратительно
     
  • 3.17, Аноним (17), 11:21, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +11 +/
    Уточнение:

    Начнут переписывать.

     
     
  • 4.30, Аноним (30), 11:58, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Уточнение:

    второй раз

     
     
  • 5.44, Аноним (44), 12:44, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Его и первый раз не начали, там растеры сделали какой-то минимальный бекенд и забросили, думая что Даниэль будет сам поддерживать его. А он не стал и просто выбросили его - https://daniel.haxx.se/blog/2024/12/21/dropping-hyper/
     
     
  • 6.75, morphe (?), 14:05, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Он же прямо говорит что вместе с теми кто этот бекенд и добавил решили что оно не нужно, функциональность слишком сильно дублирует то что в curl уже есть, не давая особых преимуществ, но при этом усложняя сборку

    Всем желающим заменить curl на Rust - hyper имеет своё сишное апи, без лишней прослойки в форме api curl: https://docs.rs/hyper/latest/hyper/ffi/index.html

     
  • 3.21, aname (ok), 11:36, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ох уж эти тысячи глаз
     
  • 3.48, zionist (ok), 13:05, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Если уже и переписывать, то на Go. Потому что использование системного языка для простой утилиты выглядит как из пушки по воробьям.
     
     
  • 4.52, Аноним (44), 13:22, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Curl это библиотека - libcurl, а не утилита. С ней линкуется софт, если нужен http/ftp/smtp/pop3/ldap/ssh протоколы. Так что не катит тут твой гоу с его GC, рантаймом и непонятным API.
     
     
  • 5.79, zionist (ok), 14:09, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Всегда использовали лишь как утилиту. А какой именно софт с libcurl линкуется?
     
     
  • 6.90, Аноним (30), 14:27, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    запчасти системд, например
     
  • 6.106, Аноним (44), 14:53, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    1. Мой софт, в котором мне надо по HTTPS коннектиться к вебсерверу
    2. git clone https://, git push
    3. И примерно еще миллион "софтов"
     
  • 6.115, Gemorroj (ok), 15:10, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    php, например.
     
  • 6.217, Rezzet (??), 02:01, 01/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Да почти весь который использует сеть, libcurl это единственный внятный способ получить http в программе или библиотеке.
     
  • 6.228, чтд (?), 07:25, 01/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    внезапно тот же ржавый.
     
  • 4.88, Аноним (94), 14:25, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >Потому что использование системного языка для простой утилиты выглядит как из пушки по воробьям.

    OK, тогда на Python.

     
  • 3.86, Аноним (94), 14:20, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Начнут переписывать.
     
  • 3.155, анонимус (??), 18:28, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Не перепишут. Ведь ты не в курсе, что количество поддерживаемых архитектур на которых работае curl раз в 5 больше, чем их поддерживает Rust.
     
  • 2.136, Аноним (136), 16:33, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Кресты нужно закопать, за время компиляции.
     
     
  • 3.181, Аноним (183), 22:24, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Но языке без метапрограммирования уже никто всерьёз не воспринимает.
     
  • 3.184, Аноним (-), 22:37, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > за время компиляции

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

     
     
  • 4.220, Аноним (136), 02:41, 01/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >Нормальные люди не пересобирают софт для каждого пользователя

    А ловко вы программистам в ненормальных записал.
    >Нормальные люди собирают софт один раз и им пользуются сотни или миллионы.

    Про bisect вы, как я понимаю, тоже не слышали.
    >главное что может сделать компилятор за это время.

    Компилятор просто сжигает время впустую
    https://www.opennet.me/opennews/art.shtml?num=56449 Опубликован набор патчей, ускоряющих сборку ядра Linux на 50-80%

     
  • 2.144, sena (ok), 17:27, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    С++, к сожалению, тоже полностью не избавился строк с нулевым терминатором.

    А по-хорошему надо бы начать с libc.

     
     
  • 3.230, Аноним (-), 08:26, 01/01/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     

     ....большая нить свёрнута, показать (44)

  • 1.4, Аноним (4), 10:26, 31/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Где бенчмарки?
     
  • 1.5, Tron is Whistling (?), 10:27, 31/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ну вот да, если нет managed строк - явная передача размеров буферов - лучшее решение.
     
     
  • 2.91, Аноним (94), 14:28, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Обязательно null terminated строки тоже можно считать managed.
     

  • 1.6, kravich (ok), 10:31, 31/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    >Кроме того, прекращение использования strcpy позволит избавиться от потока ложных сообщений об уязвимостях из-за некорректных срабатываний AI-инструментов, считающих наличие strcpy() уязвимостью без учёта имеющихся в коде проверок.

    Это какой-то.... позор?

     
     
  • 2.7, Tron is Whistling (?), 10:39, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Что да, то да. Когда термометр на мороженой рыбе показывает +50 - стоит выкинуть термометр.
     
     
  • 3.93, Аноним (94), 14:30, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    После выкидывания выяснится, что термометр показывал в Кельвинах.
     
     
  • 4.112, Tron is Whistling (?), 15:06, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > После выкидывания выяснится, что термометр показывал в Кельвинах.

    Не, 50 по Кельвину на мороженой рыбе - это слишком мороженая рыба.
    А в Фаренгейтах тоже уже не мороженая, и можно выкидывать.
    Короче говоря если термометр кажет в шумах океана Марса - ему пора на покой.

     
  • 2.22, aname (ok), 11:37, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    С другой стороны, заявляется, что качество кода улучшено.
     
  • 2.92, Аноним (89), 14:29, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Это какой-то.... позор?

    Это ИИ-инструменты.

     
  • 2.121, RM (ok), 15:37, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    это когда заманался сц ь против ветра что характерно - ветер искусственно соз... большой текст свёрнут, показать
     

  • 1.10, онанист (?), 10:53, 31/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    из-за некорректных срабатываний AI-инструментов, считающих наличие strcpy() уязвимостью


    очередная победа "безопасности" над здравым смыслом.
    осталось ещё отключить интернет.

     
     
  • 2.24, Аноним (24), 11:41, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    "False positives" существовали всегда, если "эксперты по безопасности", проверяющие код AI-инструментами, об этом не в курсе, то это вопрос квалификации таких "экспертов". (Это, конечно же, не отменяет того факта, что AI в его нынешнем состоянии - срущий под себя младенец, пригодный только для выкачивания денег из инвесторов)
     

  • 1.12, Фонтимос (?), 11:00, 31/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    >автор утилиты ..., объявил о

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

     
     
  • 2.14, An (??), 11:09, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Зря вы так. C тут то, что доктор прописал. На python слишком медленно будет.
     
     
  • 3.40, Фонтимос (?), 12:41, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ну, питон как-бы популярный, но думаю, сейчас уже не актуальный.
     
     
  • 4.68, Аноним (56), 13:50, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Ну, питон как-бы популярный

    и самое главное - в количестве пробелов не ошибиться.

     
     
  • 5.180, Аноним (183), 22:20, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    А не ставьте их слишком много на один блок кода - не ошибётесь. Например, два, всегда легко посчитать.
     
  • 2.23, aname (ok), 11:39, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не совсем понятно, зачем ему что- то переписывать на C#
     
     
  • 3.41, Фонтимос (?), 12:42, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Да, не, это не слишком актуально сейчас
     
     
  • 4.162, aname (ok), 19:34, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Да, не, это не слишком актуально сейчас

    Очень даже актуально

     
  • 2.33, Аноним (-), 12:20, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Он уже пытался, но неосилил выносить нытье любителей некроплатформ.
    Так что пусть хлебает щии(т) полной ложкой и выдумывает костыли для подпорки проекта.
     
     
  • 3.43, Фонтимос (?), 12:43, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Бог любит троицу, так-что еще не все потеряно
     

  • 1.19, Аноним (-), 11:31, 31/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > Применение strncpy() создавало опасность возникновения ошибок из-за
    > пропуска нулевого символа в конце строки или добавочного заполнения
    > нулями.

    Шикарный йазычог с офигенно продуманной стандартной либой :)
    Прям все сделано для людей.

    > Замена strcpy() на curlx_strcopy() произведена, так как существует
    > вероятность человеческой ошибки, приводящей к разделению кода с
    > проверкой/выделением памяти и вызовом strcpy(), например, при
    > необдуманном переносе лишь части кода или вставки кода между проверкой
    > и вызовом strcpy()

    Хехе, classic.
    Что забавно, даже новая curlx_strcopy не возвращает ошибку, если размеры не подходящие, а молча копирует нулевой символ.

     
     
  • 2.26, Аноним (26), 11:49, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Хехе, classic.

    в топку любые функции в стд, которые используют внутри себя другие функции. Эти функции фактически обертки над memset, пусть эти обертки пишет сам программист под свои задачи, по факту если это функция в стандартной библиотеке, то по существу там все входные параметры должны быть проверены на корректность, и указатели и длины, а тут что? - одни предположения. Мракобесие!

     
  • 2.27, Аноним (26), 11:50, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    правка: memcpy, неважно, суть в общем ясна.
     
  • 2.28, Аноним (28), 11:51, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Шикарный йазычог с офигенно продуманной стандартной либой :)

    Никто не мешает использовать более безопасные инструкции, вместо устаревших. Microsoft ещё в ранних Visual Studio сделала, чтобы компилятор ругался. Ты что ли не стареешь, офигенный продуман.

     
     
  • 3.72, Аноним (56), 13:57, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Microsoft ещё в ранних Visual Studio сделала, чтобы компилятор ругался.

    Он бы ругался, когда во все проекты телеметрию добавляет.

     

  • 1.25, Аноним (24), 11:47, 31/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Для исключения уязвимостей в коде на Си достаточно средств, предоставляемых самим Си? Ай, беда-трагедия, как же тогда прогресс двигать, если можно без модных язычков обходиться?
     
     
  • 2.167, PROgrm_JARvis (ok), 20:32, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Настолько достаточно, что оно требует своего per-project велосипеда, делает рантайм-проверку (а в релизных билдах и на неё забивает), и требует не забывать за собой таскать длину отдельной перменной которую ну разумеется нельзя перепутать (нет)
     

  • 1.29, Аноним (29), 11:53, 31/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А поцаны, писавшие всю жизнь на паскале и использовавшие для этого string, даже и не знали об этой проблеме. А кто то все еще думает, что паскаль с его строгой типизацией - плохой язык.
     
     
  • 2.32, warlock (??), 12:13, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    string — это который не может быть длиннее 255 символов?
     
     
  • 3.36, Аноним (-), 12:27, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ты что паскаль последний раз видел когда Ельцин был президентом)?
    String is an alias for ShortString, AnsiString or Unicodestring (UTF16) depending on a compiler setting.

    Т.е оно не просто поддерживает длинные строки, но еще и Unicode.
    Чего дырявым ЯП даже не снилось.

     
     
  • 4.38, Аноним (26), 12:39, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Ты что

    Надо начинать сначала с понятий bounded и unbounded string, потом уже ShortString, AnsiString or Unicodestring (UTF16) :)

     
  • 4.54, Аноним (44), 13:26, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Чего дырявым ЯП даже не снилось.

    Ты что Сишку видел когда еще Горбачёв был президентом СССР? В Си строки вообще никогда не были ограничены по длинне, и так же 100 лет умеют в юникод.

     
     
  • 5.69, Аноним (-), 13:52, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > В Си строки

    А в СИ есть строки? Вот это новость!!!
    Специально открыл стандарт, но там никакого string data type нету.
    В string.h какие-то недофункции для работы с чарами.

    > вообще никогда не были ограничены по длинне,

    Конечно не ограничены.
    Ни по длинне, ни по буферу. Главное не забывать про нуль-терминатор, иначе будет бо-бо.

    > и так же 100 лет умеют в юникод.

    Настолько, что росчитать длину строки в символах для UTF-8 уже проблема.


     
     
  • 6.74, Аноним (44), 14:05, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > А в СИ есть строки? Вот это новость!!!

    Ну это же вы начали первый. Я вам подыграл немного. Да, в Си нет никаких строк, как и в ассемблере. В асме "строки" это просто массив байт, ровно как и в Си.

    > Настолько, что росчитать длину строки в символах для UTF-8 уже проблема.

    И какая тут проблема у вас?

     
     
  • 7.81, morphe (?), 14:10, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > И какая тут проблема у вас?

    С utf-16 при конвертации в utf-8 нужно заново по строке итерироваться и пересчитывать всё, потому что 2-4 байта в utf-16 это от 1 до 5 байт в utf-8

    Вычисления не бесплатные, и требуются во всех программах что взаимодействуют с реальным миром, где в utf-16 данные не хранит никто

     
     
  • 8.96, fi (ok), 14:36, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А вот не надо С utf-16 при конвертации в utf-8 делать, что за детские ошибки ... текст свёрнут, показать
     
     
  • 9.103, morphe (?), 14:45, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Зачем тебе со строкой работать как с массивом wchar_t Какой в этом смысл ... текст свёрнут, показать
     
  • 7.83, Аноним (-), 14:13, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > В асме "строки" это просто массив байт, ровно как и в Си.

    Да, потому сишка это просто переносимый супермакроассемблер созданный для портирования юниксов на следующую PDP. Вопрос зачем писать на этом недоязыке в 2025 остается открытым

    > И какая тут проблема у вас?

    Проблема что нужно не только бегать до конца строки в поисках заветного \n как для подсчета размера в байтах, а еще и проверять является ли последовательность байтов валидным UTF-character и подсчитывать именно их. А что делать если не валидная?)

    И так каждый раз, вместо того, чтобы один раз посчитать при создании и валидации и потом просто использовать это значение.

     
     
  • 8.153, warlock (??), 18:28, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Если вам зачем-то нужно знать длину строки в кодепойнтах, это очень сильный марк... текст свёрнут, показать
     
  • 7.98, Аноним (89), 14:37, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > в Си нет никаких строк, как и в ассемблере. В асме "строки" это просто массив байт, ровно как и в Си.

    Как в си-строке, т.е. си-массиве, внутри строки сделать символ 0? Что будет выдавать функция "длина строки"?

     
     
  • 8.110, Аноним (44), 14:58, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Я не понимаю нафига ты тут кривляешься - вставляешь в середину 0 и всё, strlen ... текст свёрнут, показать
     
     
  • 9.131, Аноним (-), 16:13, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Прям генитальное решение от дидов Т е вы предлагаете не использовать все функ... текст свёрнут, показать
     
  • 5.95, Аноним (89), 14:34, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > В Си строки вообще никогда не были ограничены по длинне

    И сколько будет работать функция, определяющая длину строки, на строке в пару гектар?

     
  • 4.77, morphe (?), 14:08, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > но еще и Unicode

    Вот только utf16, как и все другие языки что добавили поддержку unicode непрозрачно, в 90х годах, а не нормальный utf8

     
     
  • 5.104, Аноним (29), 14:49, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Это в Delphi. В Lazarus UTF8. И я лично не понимаю линуксовую истерику по поводу UTF16. Вы должны понять одну простую вещь. UTF8 эффективен только если вы с US или GB и пишете на чистом английском. Как только вы начинаете использовать в строке региональные буковки - UTF16 становится в среднем более эффективным по памяти, чем UTF8.
     
     
  • 6.107, morphe (?), 14:54, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Как только вы начинаете использовать в строке региональные буковки - UTF16 становится в среднем более эффективным по памяти, чем UTF8.

    Он становится в среднем более эффективным по памяти на строках которые состоят исключительно из арабского и китайского, при этом не любого

    Русский и большинство других языков входящих в BMP кодируются как 2 байта на букву, т.е не менее эффективно чем utf16

     
     
  • 7.109, morphe (?), 14:58, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > исключительно из арабского и китайского, при этом не любого

    Кстати соврал, арабский входит в BMP

    Эффективнее значит выходит только CJK, который в utf-8 кодируется в 3 байта против 2х в utf-16

    ...Однако это нивелируется тем что у тебя китайский текст обычно и английский содержит, всякие JSON/XML/HTML/прочие форматы

     
  • 6.152, Аноним (-), 17:54, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Как только вы начинаете использовать в строке региональные буковки - UTF16 становится в среднем более эффективным по памяти, чем UTF8.

    Нетже. В русских локалях ты можешь видеть немало цифр, знаков препинания, пробелов и прочих символов из ASCII, которые в utf8 кодируются одним байтом. Кириллические кодируются двумя, но... Ты никогда не считал, какую долю символов русского текста составляют кириллические букафки?

    При этом, даже в русской локали, ты можешь сделать ls -R /, и увидеть что большинство имён файлов в чистом ASCII.

     
     
  • 7.158, Аноним (-), 18:42, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Проснись мудак ASCII давно нету. Есть Базовая латинница стандарта Юникод.
     
     
  • 8.164, Аноним (-), 19:53, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Мне плевать Даже если она и есть, то это не базовая _латинница_, а ASCII там н... текст свёрнут, показать
     
     
  • 9.194, Аноним (196), 23:25, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ну ты и мудак Однобайтный ASCII с 128 символами полность перенесён в Юникод Те... текст свёрнут, показать
     
     
  • 10.204, morphe (?), 23:40, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Зачем до слов докапываться, лол Все понимают что значит ASCII, Однобайтный ASCI... текст свёрнут, показать
     
  • 7.206, morphe (?), 23:41, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Кириллические кодируются двумя, но

    Никакие но не нужны, потому что в utf16 это те же самые 2 байта)

     
  • 3.58, Аноним (29), 13:36, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Неа Строки были динамические еще со времен TP Причем за временем жизни следить... большой текст свёрнут, показать
     
     
  • 4.128, Аноним (-), 15:44, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Респект за TInterfacedObject!
     
  • 4.143, Аноним (26), 17:27, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Неа. Строки были динамические еще со времен TP.

    в ada bounded строки на стеке, unbounded в куче

     
  • 4.221, _ (??), 03:53, 01/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > А паскаль - эт ваще чудо.

    Та - да! Правдо - мёртвое ... причем мертвое уже дольше чем ты этот шарик топчешь ... :)
    fpc - неплох. Но вот не юзают жи :\

     
  • 3.63, Аноним (29), 13:40, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да, на паскале можно писать почти как на скриптовом языке. Можно создать что то типа TList<TMyInterface>, добавлять туда что то без необходимости очищать это добро унылым кодом типа for I := 0 to FList.Count - 1 do FList[I].Free. И даже можно создавать, едрен батон, анонимные объекты, т.е. что то типа MyFunc(TMyObject.Create).
     
  • 2.35, Tty4 (?), 12:23, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Паскаль всегда был слишком понятным и эффективным. Если что-то написано - сразу понятно, бред или нет (академический, те физиков и ко, код очень часто бред, просто иногда работает, его в расчет не берём). Очень сложно пускать пыль в глаза, когда Вас легко вывести на чистую воду.
    Поэтому Питон, Си, Раст нужны - мозг свой вынесешь, пока разберёшься, что не так работает.
     
     
  • 3.78, Аноним (29), 14:08, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Я сейчас пишу на C/C++. Да, я тормоз. Когда все писали на C, я писал на паскале. Когда все пишут на Rust, я пишу на C/C++. Ну что могу сказать. У C/C++ есть свои плюсы, но и свои минусы, типа невозможности присваивать массивы и необходимости кастовать enum в int. Но если я реально хочу быстро написать какую-то прогу без лишних заморочек и мозголомства - я все равно запускаю Lazarus.

    У меня есть старый проект на 300к строк, где нет ни одной утечки памяти. А все почему? Потому, что хорошая дисциплина написания кода и волшебный FastMM, который умеет рапортовать ошибки памяти. В том числе и тихие хэап коррапшены, если перейти в фулл дебаг мод. Классно ведь, когда не только утечка памяти показывается, но еще и ГДЕ она происходит?

     
  • 3.97, Аноним (29), 14:36, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –2 +/
    АААААААААААААА. Ну кто-нибудь, скажите этим разработчикам Си, что они дебилы.

    Почему с их точки зрения вот это не должно работать?

    typedef uint8_t TMyArr[8];

    TMyArr A, B;

    A = B;

    Или вот такой кусок говорит, что нельзя привести тип:

    typedef struct {int X, Y;TMyArr A} TMyStruct;

    TMyStruct C = {0, 0, A};

    А если сделать вот такую замену, то должно?

    typedef struct {uint8_t Foo[8]} TMyArr;

    В чем логика? В паскале все работает и все логично.

     
     
  • 4.101, Аноним (89), 14:42, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Потому что паскаль сочинял Вирт, а си - будущие сишники.
     
  • 4.150, Аноним (44), 17:45, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Потому что ты прикинулся шлангом и сохраняешь массив в массив, используя их имена. А имя массива - это константный адрес, что ты тут ожидал получить?

    Прикинь! Так тоже не работает:
    int a, b;

    &a = &b;

     
  • 2.138, Аноним (136), 16:34, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >А поцаны, писавшие всю жизнь на паскале

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

     
     
  • 3.151, Аноним (44), 17:52, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Софтом на паскале никто не пользуется и его исчезающе мало - поэтому никто про испорченную память там не знает.
     
  • 2.157, Аноним (157), 18:41, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Интересно, не знал что паскаль считается плохим языком. Спасибо за информацию. В таком случае лучше его не использовать? Какой язык посоветуете?
     
     
  • 3.222, _ (??), 03:57, 01/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    High Valyrian эстэстффенно ...
     

  • 1.31, Аноним (31), 11:58, 31/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    memccpy ему не понравилась? Занулять строку звучит как лютый костыль всё равно, лучше уж abort кидать чтобы баги быстрее пофиксить связанные с неправильным размером буфера.
     
     
  • 2.39, Tron is Whistling (?), 12:41, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Шпасибо за идею, ребята, но таки не лучше. Пусть у меня лучше один запрос завалится с непонятным багом, чем всё приложение.
     
     
  • 3.51, Аноним (-), 13:20, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > Пусть у меня лучше один запрос завалится с непонятным багом, чем всё приложение.

    А если запрос НЕ завалится?
    И просто будет удалённое выполнение кода как в Net-SNMP?

    Будет лучше)?

     
     
  • 4.113, Tron is Whistling (?), 15:07, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, смотря что вам приоритетнее.
    Если у вас безопастный локалхост - наверное да, можно на пару недель и остановить.
     
  • 4.154, User (??), 18:28, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Remote root то ли будет, то ли нет - можа и вовсе следующие 20 лет не найдут - а премия вот она, и хрен ты её с не работающим кодом получишь...
    Выбор стула немножко очевиден, да?
     

  • 1.34, Tron is Whistling (?), 12:22, 31/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Вот что криво в этой реализации - нет отработки варианта slen == dsize и src[slen - 1] == 0. Это вполне себе корректный вариант, который тупо пропущен.
     
     
  • 2.37, Аноним (-), 12:35, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Не трогай! Это на новый год! (следущий)))

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

     
  • 2.156, warlock (??), 18:41, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Нет, это некорректный вариант. slen — это длина строки не включая 0.
     
     
  • 3.174, Tron is Whistling (?), 21:40, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Смотря что считать длиной, да.
    На самом деле так делать тоже хреново, появляется лёгкая возможность off-by-one.
     
  • 3.175, Tron is Whistling (?), 21:42, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Если не включая 0 - тогда всё как бы, ну, будем считать, что ок.
    Ассерт на месте, длина должна быть меньше длины буфера.
     

  • 1.42, Аноним (-), 12:43, 31/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Охохо, опять strncpy.

    Вот что она делает, судя по названию? Наверное копирует строку 🤔
    Ан нет!
    Она копирует не более n ненулевых байтов из источника и добивает буфер до n нулями (но зачем?), ломая инвариант - в буфере после копирования не строка.

    Отличная функция для строковой библиотеки, чувствуется могучий дедовский дизайн - собрать столько бесполезной функциональности в одной функции.

     
     
  • 2.50, Аноним (71), 13:14, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ну и что теперь из-за каждого чтения привет мира нужно городить библиотеку на 10 мегабайт? Раньше операционные системы были меньше 10 мегабайт.
     
     
  • 3.223, Аноним (136), 04:58, 01/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Раньше и компьютеров не было, а большинство людей были крестьянами. Не хотите вернуться?
     

  • 1.45, Аноним (45), 12:44, 31/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Какое же гнилое говно эта сишка, что в ней совсем-совсем в стандартной библиотек... большой текст свёрнут, показать
     
     
  • 2.53, Аноним (26), 13:22, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > от безысходности
    > хотя это совсем не требуется, можно было просто указатель в буфер, которым владеет пользователь API, передать, ....

    это что за такой синдром выученной беспомощности? Ну пишите сами тот самый парсер, в чем проблема?

    > А в другой функции есть баг прямо в API

    А у кактуса есть КОЛЮЧКИ! Подумаешь, главное ведь желудок забить, чтобы не урчало.

    пс: короче, причем тут Си если описанное выше мракобесие не зависит от языка, а от "потому что разраб идиот", сами ведь утверждаете.

     
     
  • 3.108, Аноним (45), 14:57, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Что-то как вижу проект на голой сишке - так обычно такой случай Закономерность,... большой текст свёрнут, показать
     
  • 2.67, Аноним (44), 13:48, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +2 +/
    gt оверквотинг удален Начал поносить сишку, а закончил тем что от безысходно... большой текст свёрнут, показать
     
     
  • 3.111, Аноним (111), 14:59, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    См. рис. 1.
     

  • 1.47, zionist (ok), 12:59, 31/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Решение является продолжением инициированного в прошлом году отказа от использования функции strncpy(), копирующей заданное число байт из входящей строки. Применение strncpy() создавало опасность возникновения ошибок из-за пропуска нулевого символа в конце строки или добавочного заполнения нулями.

    Каким образом можно пропустить нулевой символ в конце строки и причём тут вообще добавочное заполнение нулями? Если оперировать Си строками без грязных хаков и собственных велосипедов, то нулевой символ никогда не исчезнит. Функция strcpy никогда не теряет нулевой символ. Если после нулевого символа есть дополнительные нулевые символы, это вообще не должно создавать никаких проблем. Если я не прав, приведите пример кода.

     
     
  • 2.64, Аноним (56), 13:41, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Надо же было гражданину отличиться. Отличился.
     
  • 2.76, Аноним (-), 14:06, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Каким образом можно пропустить нулевой символ в конце строки

    Элементарно. godbolt.org/z/znGerE5h6

    int main() {
        char source[] = "Hello, World!";
        char destination[10];
        int copy_length = 10;
        strncpy(destination, source, copy_length);
        printf("Result %s", destination);
        return 0;
    }

    Program stdout: Hello, WorHello, World!
    Итого - запоротый вывод из-за потерянного \n.
    Потому что в сишечке строк нет, а есть убогие char*.

     
     
  • 3.114, Tron is Whistling (?), 15:09, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Из-за потерянного что? \0 может быть?
    Достаточно было сделать destination[copy_length - 1] = 0, и всё.
     
  • 3.116, Аноним (116), 15:13, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Функция конечно проблемная, но её проблемы можно обойти без особо сложной арифме... большой текст свёрнут, показать
     
     
  • 4.140, Аноним (-), 16:50, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Вставьте эти 5 строк в начале файла и Ваш код заработает как должен.

    А если в len передать 0?
    dst[len-1] = '\0' отработает все равно.

    Но вот куда же он запишет этот ноль?
    Он же закорраптит память.

    > Ну какие могут быть строки при написании кода микроконтроллера или MBR?

    Точно такие же как и в других ЯП.
    Напр. на паскале можно писать для PIC (Pic Micro Pascal) и там есть STRING.
    Строка это для программиста чтобы не прдлиться с вычислениями len, потому что этот len - неотъемлимый атрибут строки.

     
  • 3.122, Аноним (44), 15:39, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Потому что в сишечке строк нет, а есть убогие char*.

    Хоспади, ну как же вы задолбали со своими строками. Какие-такие строки? Покажи мне строки в ассемблере! А еще в сишке нету звука и картинок - это всё просто байты, как и эти ваши строки.

     
     
  • 4.137, Аноним (-), 16:33, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Какие-такие строки?

    Файл называется string.h, а функции начинаются с префикса str.
    Слово string сам перевести сможешь?

    > Покажи мне строки в ассемблере!

    Как же вы задолбали своим ассемблером!
    Си это у нас ассемблер или "высокоуровневый язык программирования"?
    Если ассемблер - то вопросов нет. Если ЯП, то почему в нем нет строк?)

     
  • 4.147, Аноним (147), 17:34, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Просто кто-то гуманитариям неправильно объяснил что такое программирование. Пора уже привыкнуть
     
  • 4.224, Аноним (136), 05:01, 01/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >Покажи мне строки в ассемблере!

    Покажите мне современный софт на ассемблере, а не поддерлки типа колибри.
    >А еще в сишке нету звука и картинок - это всё просто байты

    Совершенно внезапно, но либо вы используете условные шейдеры, либо у вас тормозит даже условные 1080p.

     
     
  • 5.226, Аноним (44), 05:10, 01/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > Покажите мне современный софт на ассемблере, а не поддерлки типа колибри.

    Любой софт на C/C++ - компилируется в ассемблер, можешь на него посмотреть.

     

  • 1.62, Аноним (62), 13:39, 31/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Недавно смотрел код этой библиотеки. Код страшноват даже по меркам си. С модульностью как-то тоже не очень, один здоровый монолит. Даже не ясно, кто в здравом уме будет это поддерживать, если автор отойдёт от дел.
     
     
  • 2.70, Аноним (71), 13:53, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    ИИ будет поддерживать.
     

  • 1.119, zionist (ok), 15:23, 31/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Адаптированный пример использования strncpy из второго издания K&R:

    #include <stdlib.h>
    #include <sys/dir.h> /* local directory structure */

    #define NAME_MAX 14 /* longest filename component; */

    /* system-dependent */
    typedef struct { /* portable directory entry */
        long ino; /* inode number */
        char name[NAME_MAX+1]; /* name + '\0' terminator */
    } Dirent;

    typedef struct { /* minimal DIR: no buffering, etc. */
        int fd; /* file descriptor for the directory */
        Dirent d; /* the directory entry */
    } DIR;

    /* readdir: read directory entries in sequence */
    Dirent *readdir(DIR *dp)
    {
        struct direct dirbuf; /* local directory structure */
        static Dirent d; /* return: portable structure */

        while (read(dp->fd, (char *) &dirbuf, sizeof(dirbuf)) == sizeof(dirbuf)) {
            if (dirbuf.d_ino == 0) /* slot not in use */
                continue;
            d.ino = dirbuf.d_ino;
            strncpy(d.name, dirbuf.d_name, NAME_MAX);
            d.name[NAME_MAX] = '\0'; /* ensure termination */
            return &d;
        }
        return NULL;
    }


    Покритикуйте дедов. В чём они тут ошибались?

     
     
  • 2.163, Аноним (163), 19:37, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Покритикуйте дедов. В чём они тут ошибались?

    strncpy и все strn* вообще придуманы не для этого. С одной стороны, после них нужно добавлять нулевой символ, как в твоём листинге. Об этом легко забыть, это небезопасно. С другой стороны - char buffer[1024*1024]; strncpy(buffer, "x", sizeof(buffer)); запишет один мегабайт данных. Эти функции - для формирования записей в файлах (например, dBase), не для строк в приложениях. Кроме того, в листинге та же самая проблема, что и в новости. Если что-то не влезло - ты не знаешь, что оно обрезалось, и продолжаешь считать, что у тебя валидные данные. Сильно натянутый, но понятный пример: ты можешь случайно прочитать ".ssh/aaaa...aaaa" вместо ".ssh/aaaa...aaaa.pub".

     
     
  • 3.199, zionist (ok), 23:34, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Будет ли исходная строка обрезана можно узнать заранее, просто сравнив её длину с третьим аргументов strncpy. Как правило такая ситуация означает ошибку и следовательно исключает саму необходимость вызывать strncpy или strcpy. Си строки заканчиваются нулевым символом и забывать об этом нельзя никогда. Соглашусь лишь в одном - функция strncpy предназначена для _полного_ заполнения результирующего буфера.

    curlx_strcopy представляет из себя какую-то внутреннюю договорённость проекта curl, которая врядли подходит для общего использование. Достаточно взглянуть на неконсистентную обработку ситуации, когда условие slen < dsize не выполняется в дебаг и в релиз версиях.

     
  • 2.188, warlock (??), 22:47, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Не по теме, но  в программе весьма типичная ошибка программ на C: возвращается указатель на локальную переменную.
     
     
  • 3.191, zionist (ok), 22:56, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Нет никакой ошибки. Эта переменная статическая и указатель на неё возвращать можно.
     
     
  • 4.193, warlock (??), 23:18, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Точно, проглядел. Мне позор, а автору оторвать руки за такой код.

     
     
  • 5.201, zionist (ok), 23:36, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Его руки создали UNIX. Чем вам не угодили статические переменные?
     
     
  • 6.210, warlock (??), 00:04, 01/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    У статических переменных много проблем. Теряется реентерабельность, multi-thread safety. Даже просто два вызова подряд уже проблема.
     
     
  • 7.211, zionist (ok), 00:22, 01/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Так вам и глобальные переменные не по душе? Статические переменные внутри функций - это те же глобальные переменные, но с ограниченной зоной видимости в коде.

     
     
  • 8.212, warlock (??), 00:36, 01/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Глобальные переменные хуже, так как могут ещё и неявную связь между разными функ... текст свёрнут, показать
     

  • 1.120, Кошкажена (?), 15:23, 31/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Почему не сделать структуру строки с размером, например, как в Glib?
     
     
  • 2.123, Аноним (44), 15:41, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Потому что это библа, в которые данные приходят снаружи, где нет этих структур.
     
     
  • 3.124, Кошкажена (?), 15:42, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Потому что это библа, в которые данные приходят снаружи, где нет этих
    > структур.

    Кто мешает обернуть char* в структуру и передать дальше по коду? Производительность упадет на 0.000000000001%?

     
     
  • 4.127, Аноним (44), 15:44, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Ну дак оборачивай и передавай. Только патч автору не забудь прислать, в котором все операции со строками внутри libcurl заменены на твою структуру.
     
     
  • 5.129, Кошкажена (?), 15:46, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Ну дак оборачивай и передавай. Только патч автору не забудь прислать, в
    > котором все операции со строками внутри libcurl заменены на твою структуру.

    Ну то есть ничего не мешает, просто вместо нормального решения проблемы раз и навсегда ходят около и меняют таки весь код. Воистину лучше бы на С++ переписали.

     
     
  • 6.146, Аноним (44), 17:33, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Дело в том что внешний интерфейс должен оставаться стабильным. Как ты предлагаешь сделать своё решение, чтоб существующий софт продолжил работать, если кто-то решит обновить libcurl на версию с этой твоей структурой?
     
     
  • 7.176, Кошкажена (?), 21:44, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Дело в том что внешний интерфейс должен оставаться стабильным. Как ты предлагаешь
    > сделать своё решение, чтоб существующий софт продолжил работать, если кто-то решит
    > обновить libcurl на версию с этой твоей структурой?

    Обернуть внутри в структуру из вызова апи. Да хоть создать std::string из const char* и далее внутри std::string использовать.

     
  • 3.125, Кошкажена (?), 15:43, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Потому что это библа, в которые данные приходят снаружи, где нет этих
    > структур.

    Или кто мешает отдать структуру наружу в апи + функцию создания? Все равно они зовут strlen

     
     
  • 4.200, Аноним (26), 23:35, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Или кто мешает

    Мешает - хитроопость, а кто завтра будет гранты выделять на допиливание и доведение до ума? - НИКТО, если оно будет качественным по определению. Понятие законченного и доведенного ПО в СПО - НЕТ!!! И это все не просто так, а как бекдоры вносить по необходимости? Вот для этого и нужна симуляция деятельности - одним словом, бардак!

     
     
  • 5.205, Кошкажена (?), 23:41, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >> Или кто мешает
    > Мешает - хитроопость, а кто завтра будет гранты выделять на допиливание и
    > доведение до ума? - НИКТО, если оно будет качественным по определению.

    Им итак никто не выделает. Но оно уже качественное, раз работает в куче софта каждый день.

    > Понятие законченного и доведенного ПО в СПО - НЕТ!!!

    А в проприетарной разработке все законечено и доведено до ума? И не обновляется? И багов нет?

    А как же новые безопасные языки, на которые писать просто и безопасно? Получается сразу себе гранты отрубают? Как же так?

     
     
  • 6.219, Аноним (26), 02:10, 01/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Критериев качества не вижу, если каждый день переписывают Яп с недостандартом, ... большой текст свёрнут, показать
     
  • 2.225, Аноним (136), 05:02, 01/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Ну вот возьми и сделай, в чём проблема?
     

  • 1.132, Roman Dyaba (ok), 16:19, 31/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Во первых это void, во вторых это вообще всё бред сивой кобылы в лунную ночь !
     
     
  • 2.134, Кошкажена (?), 16:28, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    В комментариях по ссылке он пишет почему возвращает void.
     
     
  • 3.139, Аноним (-), 16:38, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > В комментариях по ссылке он пишет почему возвращает void.

    | This function is meant to always work – like strcpy.

    Это не ответ. Точнее это невероятно странное решение.
    Функция всегда будет отрабатывать как-будто все ок, даже если это не ок.

    | The idea is that this function is always used where it succeeds.
    А что если нет? Вот что тогда? Очередная дырень в курле?)

    | we catch that in testing/fuzzing – not in production.

    Хехе, ну удачки)))

     
     
  • 4.177, Кошкажена (?), 21:45, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> В комментариях по ссылке он пишет почему возвращает void.
    > | This function is meant to always work – like strcpy.
    > Это не ответ. Точнее это невероятно странное решение.

    Ну там есть еще странные ответы

    >> Isn’t this essentially strcpy_s() from Annex K (ISO C11)?
    > I have no idea – it might be. I don’t study the C standards and we still use C89 in curl…

     
     
  • 5.185, Аноним (-), 22:39, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > we still use C89 in curl…

    Это как раз понятно.
    Они гордятся, что курл собирается для некроплатформ и прочего электронного мусора.
    А туда не то что С11 не завезли, а не факт что С99 есть.

     
     
  • 6.207, Кошкажена (?), 23:42, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >> we still use C89 in curl…
    > Это как раз понятно.
    > Они гордятся, что курл собирается для некроплатформ и прочего электронного мусора.

    Это нормально.

    Не вполне нормально не смотреть на новое и не делать выводы. Рано или поздно обновят минимально поддерживаемый стандарт.

     
  • 4.192, warlock (??), 22:57, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Есть две сильно разных области применения программного обеспечения.

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

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

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

     

  • 1.135, Аноним (136), 16:32, 31/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Какой же хороший язык си.
    >Кроме того, прекращение использования strcpy позволит избавиться от потока ложных сообщений об уязвимостях из-за некорректных срабатываний AI-инструментов

    Вместо использования зависимых типов в итоге создан галлюцинирующий монстр.

     
  • 1.145, Аноним (-), 17:29, 31/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Многие люди никак не могут понять то, что в настоящем языке программирования вообще не должно быть строкового типа. И дело не в том, насколько низок этот язык. Для работы со строками должны быть отдельные, не входящие в язык функции, модули или процедуры.

    Строковые типы оправданы только на некомпилируемых языках, языках которые работают на виртуальных машинах. Это такие языки как Python, Java, Perl.

     
     
  • 2.159, Петр Турбо (?), 19:07, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    А я говорю все языки плохие потому что из коброки нету строк, точка!
     
     
  • 3.197, Аноним (197), 23:28, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В FreePascal и Delphi есть string и он там крутой.
     
     
  • 4.214, Аноним (89), 00:49, 01/01/2026 [^] [^^] [^^^] [ответить]  
  • +/
    И лучше пока никто не придумал, даже в плюсах.
     
  • 2.173, Илья (??), 21:35, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > в настоящем языке программирования вообще

    В сишарпе есть тип String. Ни разу там не сталкивался с какими-либо проблемами

     
     
  • 3.195, Аноним (196), 23:26, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вантузный Си-шарп некомпилируемый язык. Ему можно.
     

  • 1.160, aa (?), 19:12, 31/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    будет ли он избавляться от strdup который питонисты принесли в стандарт С?
     
     
  • 2.189, Аноним (189), 22:53, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    один питонист отметился :)
     

  • 1.161, Аноним (161), 19:32, 31/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    остаётся carbon
     
     
  • 2.178, Кошкажена (?), 21:47, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > остаётся carbon

    carbon не плох, но он для плюсовиков. К тому же давно о нем не слышно. Автор же сам по ссылкам в комментариях говорит, что ничего не хочеть учить

    > I have no idea – it might be. I don’t study the C standards and we still use C89 in curl…

     
  • 2.190, Аноним (-), 22:55, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    Не, карбон пока не остается)

    Авторы сами пишут
    Existing modern languages already provide an excellent developer experience: Go, Swift, Kotlin, Rust, and many more.
    Developers that can use one of these existing languages should.

    Carbon Language is currently an experimental project.

    Так что лет через 5 можно будет глянуть))

     

  • 1.166, Аноним (166), 20:24, 31/12/2025 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Когда говорят, что весь мир написан на Си - это повод ужаснуться. С такими проблемами ковыряться в 2025 это своё время не ценить.
     
     
  • 2.179, Кошкажена (?), 21:52, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    > Когда говорят, что весь мир написан на Си - это повод ужаснуться.
    > С такими проблемами ковыряться в 2025 это своё время не ценить.

    Не ковряйся. Создавай новый мир с чудным unsafe и ковряйся в нем. Только вот в чем загвоздка? С момента создания прошло 15 лет, а нормальной библиотеки для ui нет. tauri - веб, gpui - доки нет, egui - нестабилен + после компиляции занимает 20+Гб c примерами-бинарниками по 500Мб на окно и 2 кнопки. Вот живи в таком мирке. В итоге биндинг в gtk или qt, которые как ты понимаешь далеки от идеала. А qt как работал 20 лет назад, так и работает как часики. Буквально можно открыть книжку по qt 4, прочитать и перейти на 6. Кроме qml все также примерно, все стабильно.

     
     
  • 3.186, Аноним (-), 22:43, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > А qt как работал 20 лет назад, так и работает как часики.

    Qt это С++, а не Си.
    За си вам к GовноTK. И работает оно совсем не как часики.

    > Буквально можно открыть книжку по qt 4, прочитать и перейти на 6.

    Ахахаха! Серьезно?)) Ну-ну)
    Помню сколько попоболи было при переходе с 4 на 5, а потом с 5 на 6.

     
     
  • 4.208, Кошкажена (?), 23:50, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >> А qt как работал 20 лет назад, так и работает как часики.
    > Qt это С++, а не Си.
    > За си вам к GовноTK. И работает оно совсем не как часики.

    Не правда. Нормально он работает, особенно в версии 2. На нем полно софта написано.

    >> Буквально можно открыть книжку по qt 4, прочитать и перейти на 6.
    > Ахахаха! Серьезно?)) Ну-ну)

    Да, серьезно (с).

    > Помню сколько попоболи было при переходе с 4 на 5, а потом с 5 на 6.

    Каких? Между qt 4 и 5 основными изменениями были в QtGraphics и добавление QML. База (QObject, сигналы-слоы, виджеты, QtCore) там одна c минимальными изменениями, что в 4, что в 5, что в 6.

     
  • 4.209, Кошкажена (?), 23:54, 31/12/2025 [^] [^^] [^^^] [ответить]  
  • +/
    >> Буквально можно открыть книжку по qt 4, прочитать и перейти на 6.
    > Ахахаха! Серьезно?)) Ну-ну)
    > Помню сколько попоболи было при переходе с 4 на 5

    Даже официальная документация https://wiki.qt.io/Transition_from_Qt_4.x_to_Qt5 пишет

    > The transition from Qt 4.x to Qt 5 is not expected to be significant. However, the "modularization" of the Qt code base requires some amount of changes to project configuration, such as use of "headers", and configuration of project build settings (such as changes to the *.pro files).

     
  • 3.215, Аноним (215), 01:20, 01/01/2026 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Создавай новый мир с чудным unsafe и ковряйся в нем

    Для работы со строками unsafe не нужен. Это какая-то адская е-нина в Си.

     

  • 1.227, Аноним12345 (?), 05:24, 01/01/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    и это сломають
     

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



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

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