The OpenNET Project / Index page

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



"Проект Curl избавился от использования функции strcpy в коде"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от opennews (?), 31-Дек-25, 10:12 
Дэниел Cтенберг (Daniel Stenberg), автор утилиты для получения и отправки данных по сети curl, объявил о прекращении использования функции strcpy() в кодовой базе проекта и запрете применения данной функции в дальнейшем. Решение является продолжением инициированного в прошлом году отказа от использования функции strncpy(), копирующей заданное число байт из входящей строки. Применение strncpy() создавало опасность возникновения ошибок из-за  пропуска нулевого символа в конце строки или добавочного заполнения нулями...

Подробнее: https://www.opennet.dev/opennews/art.shtml?num=64532

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "Проект Curl избавился от использования функции strcpy в коде"  +2 +/
Сообщение от Ilnarildarovuchemail (?), 31-Дек-25, 10:12 
Молодцы, хорошее и safe изменение!
Ответить | Правка | Наверх | Cообщить модератору

20. "Проект Curl избавился от использования функции strcpy в коде"  +4 +/
Сообщение от Аноним (20), 31-Дек-25, 11:35 
Очень affordable
Ответить | Правка | Наверх | Cообщить модератору

89. "Проект Curl избавился от использования функции strcpy в коде"  +2 +/
Сообщение от Аноним (89), 31-Дек-25, 14:26 
И что только сишники не наворотят, лишь бы паскаль не изучать.
Ответить | Правка | Наверх | Cообщить модератору

94. "Проект Curl избавился от использования функции strcpy в коде"  +1 +/
Сообщение от Аноним (94), 31-Дек-25, 14:33 
Утомительны эти ваши begin/endы.
Ответить | Правка | Наверх | Cообщить модератору

118. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (-), 31-Дек-25, 15:16 
В современном паскале страшный зоопарк строк. Там есть алиас string который компилятор заменяет на ansistring (однобайтовые символы + кодировка) или widestring (двухбайтовые ютф) или shortstring(это как первые только не длинее 255 символов и длина в первом байте). И есть ещё указатели на соответсвующие типы символов для каждой строки, которые могут указывать на целую строку пока не встретится нулевой (крч, логика как в си). В чистых паскалевских проектах строки вообще не доставляют проблем, но вот когда нужно выйти из манямирка и обратится к библиотеке на си, то строки сразу прекращаются в ужс-ужс череватый сегфолтами.
Ответить | Правка | К родителю #89 | Наверх | Cообщить модератору

56. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (56), 31-Дек-25, 13:33 
А всего-то нужно было Кернигана-Ритчи прочитать.
Ответить | Правка | К родителю #1 | Наверх | Cообщить модератору

71. "Проект Curl избавился от использования функции strcpy в коде"  +3 +/
Сообщение от Аноним (71), 31-Дек-25, 13:55 
И иконку перед монитором чтобы она защищала написанный код.
Ответить | Правка | Наверх | Cообщить модератору

102. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от seg (?), 31-Дек-25, 14:43 
Теперь хотя бы понятно за что сишников хейтят. А все как всегда - не читал, но проповедую.
Ответить | Правка | К родителю #56 | Наверх | Cообщить модератору

117. Скрыто модератором  +/
Сообщение от Вася (??), 31-Дек-25, 15:15 
Ответить | Правка | Наверх | Cообщить модератору

3. "Проект Curl избавился от использования функции strcpy в коде"  +5 +/
Сообщение от Bottle (?), 31-Дек-25, 10:19 
А могли бы использовать C++ и не пилить велосипед со строками...
Ответить | Правка | Наверх | Cообщить модератору

9. "Проект Curl избавился от использования функции strcpy в коде"  –2 +/
Сообщение от Аноним (9), 31-Дек-25, 10:45 
а могли бы использовать питон и не заморачиваться вообще, а могли бы заплатить денег индусам и им бы все накодили, а могли бы найти гадалку чтобы она им искала ошибки через спиритические сеансы, ....сколько возможностей упущенно, ай яй яй
Ответить | Правка | Наверх | Cообщить модератору

66. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (56), 31-Дек-25, 13:46 
>  а могли бы заплатить денег индусам и им бы все накодили

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

Ответить | Правка | Наверх | Cообщить модератору

11. "Проект Curl избавился от использования функции strcpy в коде"  –6 +/
Сообщение от Аноним (-), 31-Дек-25, 10:53 
Поясню, программирование на чистом Си похоже на поэзию. Когда вы пишите стихи, люди жившие до вас много раз писали о том, о чём пишите Вы. Но данный факт не является причиной того что не надо писать стихи.

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

Ответить | Правка | К родителю #3 | Наверх | Cообщить модератору

57. "Проект Curl избавился от использования функции strcpy в коде"  –1 +/
Сообщение от Аноним (94), 31-Дек-25, 13:34 
Программирование на чистом Си похоже на письмо по слогам.
Ответить | Правка | Наверх | Cообщить модератору

60. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Zulu (?), 31-Дек-25, 13:39 
Самурай без меча подобен самураю с мечом, но без меча.
Ответить | Правка | Наверх | Cообщить модератору

84. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (94), 31-Дек-25, 14:14 
Но не все хотят быть самураями. Поэтому сейчас для микроконтроллеров мало кто пишет на ассемблере.
Ответить | Правка | Наверх | Cообщить модератору

59. "Проект Curl избавился от использования функции strcpy в коде"  +3 +/
Сообщение от Аноним (56), 31-Дек-25, 13:37 
> Поясню, программирование на чистом Си похоже на поэзию.

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

Ответить | Правка | К родителю #11 | Наверх | Cообщить модератору

73. "Проект Curl избавился от использования функции strcpy в коде"  –1 +/
Сообщение от cnjzxir (?), 31-Дек-25, 13:57 
Можно примеры?
Ответить | Правка | Наверх | Cообщить модератору

82. "Проект Curl избавился от использования функции strcpy в коде"  –1 +/
Сообщение от Аноним (-), 31-Дек-25, 14:11 
> Абсолютно согласен. Мне напоминает Маяковского

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

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

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

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

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

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

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

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


Ответить | Правка | К родителю #59 | Наверх | Cообщить модератору

99. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (-), 31-Дек-25, 14:38 
>Т.е главное как оно выглядит, как работает уже не важно))?

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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

85. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (94), 31-Дек-25, 14:19 
Си и эстетика... сомнительно совместимые понятия. Но Раст, в этом плане, ещё хуже.
Ответить | Правка | К родителю #59 | Наверх | Cообщить модератору

13. "Проект Curl избавился от использования функции strcpy в коде"  –3 +/
Сообщение от xPhoenix (ok), 31-Дек-25, 11:05 
Рано или поздно и curl на Rust перепишут.
Ответить | Правка | К родителю #3 | Наверх | Cообщить модератору

15. "Проект Curl избавился от использования функции strcpy в коде"  +3 +/
Сообщение от Ilnarildarovuchemail (?), 31-Дек-25, 11:12 
И это будет отвратительно
Ответить | Правка | Наверх | Cообщить модератору

17. "Проект Curl избавился от использования функции strcpy в коде"  +7 +/
Сообщение от Аноним (17), 31-Дек-25, 11:21 
Уточнение:

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

Ответить | Правка | К родителю #13 | Наверх | Cообщить модератору

30. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (30), 31-Дек-25, 11:58 
Уточнение:

второй раз

Ответить | Правка | Наверх | Cообщить модератору

44. "Проект Curl избавился от использования функции strcpy в коде"  +3 +/
Сообщение от Аноним (44), 31-Дек-25, 12:44 
Его и первый раз не начали, там растеры сделали какой-то минимальный бекенд и забросили, думая что Даниэль будет сам поддерживать его. А он не стал и просто выбросили его - https://daniel.haxx.se/blog/2024/12/21/dropping-hyper/
Ответить | Правка | Наверх | Cообщить модератору

75. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от morphe (?), 31-Дек-25, 14:05 
Он же прямо говорит что вместе с теми кто этот бекенд и добавил решили что оно не нужно, функциональность слишком сильно дублирует то что в curl уже есть, не давая особых преимуществ, но при этом усложняя сборку

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

Ответить | Правка | Наверх | Cообщить модератору

21. "Проект Curl избавился от использования функции strcpy в коде"  +1 +/
Сообщение от aname (ok), 31-Дек-25, 11:36 
Ох уж эти тысячи глаз
Ответить | Правка | К родителю #13 | Наверх | Cообщить модератору

48. "Проект Curl избавился от использования функции strcpy в коде"  –3 +/
Сообщение от zionist (ok), 31-Дек-25, 13:05 
Если уже и переписывать, то на Go. Потому что использование системного языка для простой утилиты выглядит как из пушки по воробьям.
Ответить | Правка | К родителю #13 | Наверх | Cообщить модератору

52. "Проект Curl избавился от использования функции strcpy в коде"  +3 +/
Сообщение от Аноним (44), 31-Дек-25, 13:22 
Curl это библиотека - libcurl, а не утилита. С ней линкуется софт, если нужен http/ftp/smtp/pop3/ldap/ssh протоколы. Так что не катит тут твой гоу с его GC, рантаймом и непонятным API.
Ответить | Правка | Наверх | Cообщить модератору

79. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от zionist (ok), 31-Дек-25, 14:09 
Всегда использовали лишь как утилиту. А какой именно софт с libcurl линкуется?
Ответить | Правка | Наверх | Cообщить модератору

90. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (30), 31-Дек-25, 14:27 
запчасти системд, например
Ответить | Правка | Наверх | Cообщить модератору

106. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (44), 31-Дек-25, 14:53 
1. Мой софт, в котором мне надо по HTTPS коннектиться к вебсерверу
2. git clone https://, git push
3. И примерно еще миллион "софтов"
Ответить | Правка | К родителю #79 | Наверх | Cообщить модератору

115. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Gemorroj (ok), 31-Дек-25, 15:10 
php, например.
Ответить | Правка | К родителю #79 | Наверх | Cообщить модератору

88. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (94), 31-Дек-25, 14:25 
>Потому что использование системного языка для простой утилиты выглядит как из пушки по воробьям.

OK, тогда на Python.

Ответить | Правка | К родителю #48 | Наверх | Cообщить модератору

86. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (94), 31-Дек-25, 14:20 
Начнут переписывать.
Ответить | Правка | К родителю #13 | Наверх | Cообщить модератору

4. "Проект Curl избавился от использования функции strcpy в коде"  +2 +/
Сообщение от Аноним (4), 31-Дек-25, 10:26 
Где бенчмарки?
Ответить | Правка | Наверх | Cообщить модератору

100. Скрыто модератором  +/
Сообщение от Аноним (-), 31-Дек-25, 14:39 
Ответить | Правка | Наверх | Cообщить модератору

5. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Tron is Whistling (?), 31-Дек-25, 10:27 
Ну вот да, если нет managed строк - явная передача размеров буферов - лучшее решение.
Ответить | Правка | Наверх | Cообщить модератору

91. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (94), 31-Дек-25, 14:28 
Обязательно null terminated строки тоже можно считать managed.
Ответить | Правка | Наверх | Cообщить модератору

6. "Проект Curl избавился от использования функции strcpy в коде"  +2 +/
Сообщение от kravich (ok), 31-Дек-25, 10:31 
>Кроме того, прекращение использования strcpy позволит избавиться от потока ложных сообщений об уязвимостях из-за некорректных срабатываний AI-инструментов, считающих наличие strcpy() уязвимостью без учёта имеющихся в коде проверок.

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

Ответить | Правка | Наверх | Cообщить модератору

7. "Проект Curl избавился от использования функции strcpy в коде"  +6 +/
Сообщение от Tron is Whistling (?), 31-Дек-25, 10:39 
Что да, то да. Когда термометр на мороженой рыбе показывает +50 - стоит выкинуть термометр.
Ответить | Правка | Наверх | Cообщить модератору

93. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (94), 31-Дек-25, 14:30 
После выкидывания выяснится, что термометр показывал в Кельвинах.
Ответить | Правка | Наверх | Cообщить модератору

112. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Tron is Whistling (?), 31-Дек-25, 15:06 
> После выкидывания выяснится, что термометр показывал в Кельвинах.

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

Ответить | Правка | Наверх | Cообщить модератору

22. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от aname (ok), 31-Дек-25, 11:37 
С другой стороны, заявляется, что качество кода улучшено.
Ответить | Правка | К родителю #6 | Наверх | Cообщить модератору

92. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (89), 31-Дек-25, 14:29 
> Это какой-то.... позор?

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

Ответить | Правка | К родителю #6 | Наверх | Cообщить модератору

10. "Проект Curl избавился от использования функции strcpy в коде"  +2 +/
Сообщение от онанист (?), 31-Дек-25, 10:53 
из-за некорректных срабатываний AI-инструментов, считающих наличие strcpy() уязвимостью


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

Ответить | Правка | Наверх | Cообщить модератору

24. "Проект Curl избавился от использования функции strcpy в коде"  +1 +/
Сообщение от Аноним (24), 31-Дек-25, 11:41 
"False positives" существовали всегда, если "эксперты по безопасности", проверяющие код AI-инструментами, об этом не в курсе, то это вопрос квалификации таких "экспертов". (Это, конечно же, не отменяет того факта, что AI в его нынешнем состоянии - срущий под себя младенец, пригодный только для выкачивания денег из инвесторов)
Ответить | Правка | Наверх | Cообщить модератору

12. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Фонтимос (?), 31-Дек-25, 11:00 
>автор утилиты ..., объявил о

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

Ответить | Правка | Наверх | Cообщить модератору

14. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от An (??), 31-Дек-25, 11:09 
Зря вы так. C тут то, что доктор прописал. На python слишком медленно будет.
Ответить | Правка | Наверх | Cообщить модератору

40. "Проект Curl избавился от использования функции strcpy в коде"  –1 +/
Сообщение от Фонтимос (?), 31-Дек-25, 12:41 
Ну, питон как-бы популярный, но думаю, сейчас уже не актуальный.
Ответить | Правка | Наверх | Cообщить модератору

68. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (56), 31-Дек-25, 13:50 
> Ну, питон как-бы популярный

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

Ответить | Правка | Наверх | Cообщить модератору

23. "Проект Curl избавился от использования функции strcpy в коде"  –1 +/
Сообщение от aname (ok), 31-Дек-25, 11:39 
Не совсем понятно, зачем ему что- то переписывать на C#
Ответить | Правка | К родителю #12 | Наверх | Cообщить модератору

41. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Фонтимос (?), 31-Дек-25, 12:42 
Да, не, это не слишком актуально сейчас
Ответить | Правка | Наверх | Cообщить модератору

33. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (-), 31-Дек-25, 12:20 
Он уже пытался, но неосилил выносить нытье любителей некроплатформ.
Так что пусть хлебает щии(т) полной ложкой и выдумывает костыли для подпорки проекта.
Ответить | Правка | К родителю #12 | Наверх | Cообщить модератору

43. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Фонтимос (?), 31-Дек-25, 12:43 
Бог любит троицу, так-что еще не все потеряно
Ответить | Правка | Наверх | Cообщить модератору

105. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (-), 31-Дек-25, 14:50 
>Очевидно, что если Данила еще немного подумает, то придет к единственно верному решению - переписать вообще на другом актуальном языке.

Толстый вброс.

Ответить | Правка | К родителю #12 | Наверх | Cообщить модератору

19. "Проект Curl избавился от использования функции strcpy в коде"  –1 +/
Сообщение от Аноним (-), 31-Дек-25, 11:31 
> Применение strncpy() создавало опасность возникновения ошибок из-за
> пропуска нулевого символа в конце строки или добавочного заполнения
> нулями.

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

26. "Проект Curl избавился от использования функции strcpy в коде"  +1 +/
Сообщение от Аноним (26), 31-Дек-25, 11:49 
> Хехе, classic.

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

Ответить | Правка | Наверх | Cообщить модератору

27. "Проект Curl избавился от использования функции strcpy в коде"  +1 +/
Сообщение от Аноним (26), 31-Дек-25, 11:50 
правка: memcpy, неважно, суть в общем ясна.
Ответить | Правка | К родителю #19 | Наверх | Cообщить модератору

28. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (28), 31-Дек-25, 11:51 
> Шикарный йазычог с офигенно продуманной стандартной либой :)

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

Ответить | Правка | К родителю #19 | Наверх | Cообщить модератору

72. "Проект Curl избавился от использования функции strcpy в коде"  +2 +/
Сообщение от Аноним (56), 31-Дек-25, 13:57 
> Microsoft ещё в ранних Visual Studio сделала, чтобы компилятор ругался.

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

Ответить | Правка | Наверх | Cообщить модератору

25. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (24), 31-Дек-25, 11:47 
Для исключения уязвимостей в коде на Си достаточно средств, предоставляемых самим Си? Ай, беда-трагедия, как же тогда прогресс двигать, если можно без модных язычков обходиться?
Ответить | Правка | Наверх | Cообщить модератору

29. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (29), 31-Дек-25, 11:53 
А поцаны, писавшие всю жизнь на паскале и использовавшие для этого string, даже и не знали об этой проблеме. А кто то все еще думает, что паскаль с его строгой типизацией - плохой язык.
Ответить | Правка | Наверх | Cообщить модератору

32. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от warlockemail (??), 31-Дек-25, 12:13 
string — это который не может быть длиннее 255 символов?
Ответить | Правка | Наверх | Cообщить модератору

36. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (-), 31-Дек-25, 12:27 
Ты что паскаль последний раз видел когда Ельцин был президентом)?
String is an alias for ShortString, AnsiString or Unicodestring (UTF16) depending on a compiler setting.

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

Ответить | Правка | Наверх | Cообщить модератору

38. "Проект Curl избавился от использования функции strcpy в коде"  +1 +/
Сообщение от Аноним (26), 31-Дек-25, 12:39 
> Ты что

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

Ответить | Правка | Наверх | Cообщить модератору

54. "Проект Curl избавился от использования функции strcpy в коде"  –1 +/
Сообщение от Аноним (44), 31-Дек-25, 13:26 
> Чего дырявым ЯП даже не снилось.

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

Ответить | Правка | К родителю #36 | Наверх | Cообщить модератору

69. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (-), 31-Дек-25, 13:52 
> В Си строки

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

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

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

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

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


Ответить | Правка | Наверх | Cообщить модератору

74. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (44), 31-Дек-25, 14:05 
> А в СИ есть строки? Вот это новость!!!

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

81. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от morphe (?), 31-Дек-25, 14:10 
> И какая тут проблема у вас?

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

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

Ответить | Правка | Наверх | Cообщить модератору

96. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от fi (ok), 31-Дек-25, 14:36 
А вот не надо "С utf-16 при конвертации в utf-8" делать, что за детские ошибки?

есть транспортное представление и внутреннее для строки, так что конвертируем utf* <=> wchar_t (32bits), с ним и работаем. Кстати, 6 уровень сетевой модели ISO.

PS utf-16 - вообще не должен был появиться "16-бит хватит для всех, 640kb ... " :DDDDDDDDDD

Ответить | Правка | Наверх | Cообщить модератору

103. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от morphe (?), 31-Дек-25, 14:45 
> wchar_t (32bits), с ним и работаем

Зачем тебе со строкой работать как с массивом wchar_t? Какой в этом смысл?

Ответить | Правка | Наверх | Cообщить модератору

83. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (-), 31-Дек-25, 14:13 
> В асме "строки" это просто массив байт, ровно как и в Си.

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

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

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

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

Ответить | Правка | К родителю #74 | Наверх | Cообщить модератору

98. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (89), 31-Дек-25, 14:37 
> в Си нет никаких строк, как и в ассемблере. В асме "строки" это просто массив байт, ровно как и в Си.

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

Ответить | Правка | К родителю #74 | Наверх | Cообщить модератору

110. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (44), 31-Дек-25, 14:58 
Я не понимаю нафига ты тут кривляешься - вставляешь в середину 0 и всё, strlen() выдаст кол-во байт до этого 0 в середине. А как должно быть? До последнего 0? А где он этот последний, в самом конце виртуального адресного пространства процесса?

struct string {
   char *data;
   size_t len;
};

Храни длину в len, для копирования используй memcpy().

Ответить | Правка | Наверх | Cообщить модератору

95. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (89), 31-Дек-25, 14:34 
> В Си строки вообще никогда не были ограничены по длинне

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

Ответить | Правка | К родителю #54 | Наверх | Cообщить модератору

77. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от morphe (?), 31-Дек-25, 14:08 
> но еще и Unicode

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

Ответить | Правка | К родителю #36 | Наверх | Cообщить модератору

104. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (29), 31-Дек-25, 14:49 
Это в Delphi. В Lazarus UTF8. И я лично не понимаю линуксовую истерику по поводу UTF16. Вы должны понять одну простую вещь. UTF8 эффективен только если вы с US или GB и пишете на чистом английском. Как только вы начинаете использовать в строке региональные буковки - UTF16 становится в среднем более эффективным по памяти, чем UTF8.
Ответить | Правка | Наверх | Cообщить модератору

107. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от morphe (?), 31-Дек-25, 14:54 
> Как только вы начинаете использовать в строке региональные буковки - UTF16 становится в среднем более эффективным по памяти, чем UTF8.

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

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

Ответить | Правка | Наверх | Cообщить модератору

109. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от morphe (?), 31-Дек-25, 14:58 
> исключительно из арабского и китайского, при этом не любого

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

58. "Проект Curl избавился от использования функции strcpy в коде"  +1 +/
Сообщение от Аноним (29), 31-Дек-25, 13:36 
Неа. Строки были динамические еще со времен TP. Причем за временем жизни следить компилятор. А всякие вот эти strблаблабла из Си - это что то из времен, когда выделять память динамически было слишком дорого, а потому или она выделялась на стеке (привет записывание за пределы буффера, бугага), или использовался некий статический буффер (привет thread-unsafe). Как давно это было?

А паскаль - эт ваще чудо. Открою большой и жирный секрет. Если заменить объекты на интерфейсы, а TObject на TInterfacedObject - можно вообще обойтись без деструкторов, ибо все время жизни будет отслеживаться компилятором. В Си/С++, насколько я знаю, так нельзя. Там надо все равно _AddRef и _Release ручками вызывать. И привет безопасная работа с памятью для криворуких программистов, которые не знают принципа матрешки - что создал, то надо удалить.

Ответить | Правка | К родителю #32 | Наверх | Cообщить модератору

63. "Проект Curl избавился от использования функции strcpy в коде"  +1 +/
Сообщение от Аноним (29), 31-Дек-25, 13:40 
Да, на паскале можно писать почти как на скриптовом языке. Можно создать что то типа TList<TMyInterface>, добавлять туда что то без необходимости очищать это добро унылым кодом типа for I := 0 to FList.Count - 1 do FList[I].Free. И даже можно создавать, едрен батон, анонимные объекты, т.е. что то типа MyFunc(TMyObject.Create).
Ответить | Правка | К родителю #32 | Наверх | Cообщить модератору

35. "Проект Curl избавился от использования функции strcpy в коде"  +1 +/
Сообщение от Tty4 (?), 31-Дек-25, 12:23 
Паскаль всегда был слишком понятным и эффективным. Если что-то написано - сразу понятно, бред или нет (академический, те физиков и ко, код очень часто бред, просто иногда работает, его в расчет не берём). Очень сложно пускать пыль в глаза, когда Вас легко вывести на чистую воду.
Поэтому Питон, Си, Раст нужны - мозг свой вынесешь, пока разберёшься, что не так работает.
Ответить | Правка | К родителю #29 | Наверх | Cообщить модератору

78. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (29), 31-Дек-25, 14:08 
Я сейчас пишу на C/C++. Да, я тормоз. Когда все писали на C, я писал на паскале. Когда все пишут на Rust, я пишу на C/C++. Ну что могу сказать. У C/C++ есть свои плюсы, но и свои минусы, типа невозможности присваивать массивы и необходимости кастовать enum в int. Но если я реально хочу быстро написать какую-то прогу без лишних заморочек и мозголомства - я все равно запускаю Lazarus.

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

Ответить | Правка | Наверх | Cообщить модератору

97. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (29), 31-Дек-25, 14:36 
АААААААААААААА. Ну кто-нибудь, скажите этим разработчикам Си, что они дебилы.

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

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;

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

Ответить | Правка | К родителю #35 | Наверх | Cообщить модератору

101. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (89), 31-Дек-25, 14:42 
Потому что паскаль сочинял Вирт, а си - будущие сишники.
Ответить | Правка | Наверх | Cообщить модератору

31. "Проект Curl избавился от использования функции strcpy в коде"  +1 +/
Сообщение от Аноним (31), 31-Дек-25, 11:58 
memccpy ему не понравилась? Занулять строку звучит как лютый костыль всё равно, лучше уж abort кидать чтобы баги быстрее пофиксить связанные с неправильным размером буфера.
Ответить | Правка | Наверх | Cообщить модератору

39. "Проект Curl избавился от использования функции strcpy в коде"  –2 +/
Сообщение от Tron is Whistling (?), 31-Дек-25, 12:41 
Шпасибо за идею, ребята, но таки не лучше. Пусть у меня лучше один запрос завалится с непонятным багом, чем всё приложение.
Ответить | Правка | Наверх | Cообщить модератору

51. "Проект Curl избавился от использования функции strcpy в коде"  +2 +/
Сообщение от Аноним (-), 31-Дек-25, 13:20 
> Пусть у меня лучше один запрос завалится с непонятным багом, чем всё приложение.

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

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

Ответить | Правка | Наверх | Cообщить модератору

113. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Tron is Whistling (?), 31-Дек-25, 15:07 
Ну, смотря что вам приоритетнее.
Если у вас безопастный локалхост - наверное да, можно на пару недель и остановить.
Ответить | Правка | Наверх | Cообщить модератору

34. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Tron is Whistling (?), 31-Дек-25, 12:22 
Вот что криво в этой реализации - нет отработки варианта slen == dsize и src[slen - 1] == 0. Это вполне себе корректный вариант, который тупо пропущен.
Ответить | Правка | Наверх | Cообщить модератору

37. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (-), 31-Дек-25, 12:35 
Не трогай! Это на новый год! (следущий)))

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

Ответить | Правка | Наверх | Cообщить модератору

42. "Проект Curl избавился от использования функции strcpy в коде"  –1 +/
Сообщение от Аноним (-), 31-Дек-25, 12:43 
Охохо, опять strncpy.

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

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

Ответить | Правка | Наверх | Cообщить модератору

50. "Проект Curl избавился от использования функции strcpy в коде"  +1 +/
Сообщение от Аноним (71), 31-Дек-25, 13:14 
Ну и что теперь из-за каждого чтения привет мира нужно городить библиотеку на 10 мегабайт? Раньше операционные системы были меньше 10 мегабайт.
Ответить | Правка | Наверх | Cообщить модератору

45. "Проект Curl избавился от использования функции strcpy в коде"  –3 +/
Сообщение от Аноним (45), 31-Дек-25, 12:44 
>Теперь все вызовы strcpy() заменены на новую функцию curlx_strcopy

Какое же гнилое говно эта сишка, что в ней совсем-совсем в стандартной библиотеке вообще ничего юзабельного нет. Менталитет сишников такой же. Сейчас я задействовал одну либу, парсящую один формат, на сишке (от безысходности, на плюсах варианта нет) ... вроде бы превосходно документированную, но ... оказалось, что таки недостаточно документированную, там внутри malloc на mallocе, хотя это совсем не требуется, можно было просто указатель в буфер, которым владеет пользователь API, передать, без каких-либо аллокаций вообще, и то, что функция делает маллоки и что возвращаемые ей значения надо освобождать - это вообще никак недокументировано! А в другой функции есть баг прямо в API, из-за которого использование её функций сразу даёт повреждение кучи из-за путаницы в типах указателей (функция из одной строчки, но там непрозрачный указатель приводится не к тому типу, потому что разраб идиот, решил сэкономить, и внутри либы одну и ту же функцию задействовать для двух разных типов, при этом весь код касаемый другого типа не протестирован вообще, так как второй тип - это плюсовые биндинги, которые автор просто добавил без каких-либо тестов).

Ответить | Правка | Наверх | Cообщить модератору

53. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (26), 31-Дек-25, 13:22 
> от безысходности
> хотя это совсем не требуется, можно было просто указатель в буфер, которым владеет пользователь API, передать, ....

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

108. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (45), 31-Дек-25, 14:57 
>сами ведь утверждаете.

Что-то как вижу проект на голой сишке - так обычно такой случай. Закономерность, не находите?

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

Так оригинальный разраб того проекта на плюсах, который я форкнул, ещё больший дятел. У него был свой парсер, написанный в худших традициях, со strcmp, да, в cpp-файле. Неудивительно, что он не работает нихрена, а в коде возле него висит ToDo: переписать. Больше 10 лет уже висит. Проект-то заброшен, но единственное мало-мальски рабочее на Qt, что есть в интернете - это это (за исключением говна от проекта Qt, которое тоже ущербное). Там вообще всё переписывать надо, но слона едят по кускам. План вообще все оригинальные исходники выкинуть, заменив на портированные с Андроидного приложения. Я вообще не ожидал, что андроидное приложение основано на таком гигантском количестве кода.

Ответить | Правка | Наверх | Cообщить модератору

67. "Проект Curl избавился от использования функции strcpy в коде"  +1 +/
Сообщение от Аноним (44), 31-Дек-25, 13:48 
>[оверквотинг удален]
> пользователь API, передать, без каких-либо аллокаций вообще, и то, что функция
> делает маллоки и что возвращаемые ей значения надо освобождать - это
> вообще никак недокументировано! А в другой функции есть баг прямо в
> API, из-за которого использование её функций сразу даёт повреждение кучи из-за
> путаницы в типах указателей (функция из одной строчки, но там непрозрачный
> указатель приводится не к тому типу, потому что разраб идиот, решил
> сэкономить, и внутри либы одну и ту же функцию задействовать для
> двух разных типов, при этом весь код касаемый другого типа не
> протестирован вообще, так как второй тип - это плюсовые биндинги, которые
> автор просто добавил без каких-либо тестов).

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

Ответить | Правка | К родителю #45 | Наверх | Cообщить модератору

111. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (111), 31-Дек-25, 14:59 
См. рис. 1.
Ответить | Правка | Наверх | Cообщить модератору

47. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от zionist (ok), 31-Дек-25, 12:59 
> Решение является продолжением инициированного в прошлом году отказа от использования функции strncpy(), копирующей заданное число байт из входящей строки. Применение strncpy() создавало опасность возникновения ошибок из-за пропуска нулевого символа в конце строки или добавочного заполнения нулями.

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

Ответить | Правка | Наверх | Cообщить модератору

64. "Проект Curl избавился от использования функции strcpy в коде"  +1 +/
Сообщение от Аноним (56), 31-Дек-25, 13:41 
Надо же было гражданину отличиться. Отличился.
Ответить | Правка | Наверх | Cообщить модератору

76. "Проект Curl избавился от использования функции strcpy в коде"  –1 +/
Сообщение от Аноним (-), 31-Дек-25, 14:06 
> Каким образом можно пропустить нулевой символ в конце строки

Элементарно. 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*.

Ответить | Правка | К родителю #47 | Наверх | Cообщить модератору

114. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Tron is Whistling (?), 31-Дек-25, 15:09 
Из-за потерянного что? \0 может быть?
Достаточно было сделать destination[copy_length - 1] = 0, и всё.
Ответить | Правка | Наверх | Cообщить модератору

116. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (116), 31-Дек-25, 15:13 
Функция конечно проблемная, но её проблемы можно обойти без особо сложной арифметики.
char* strncpy_safe(char* dst, char* src, int len) {
    dst[len-1] = '\0';
    return strncpy(dst, src, len-1);
}
#define strncpy(dst, src, len) (strncpy_safe(dst, src, len))
Вставьте эти 5 строк в начале файла и Ваш код заработает как должен.
То, что в Си нет строк это и минус и плюс. Ну какие могут быть строки при написании кода микроконтроллера или MBR? В винде вообще активно вместо null-terminated строк используется структура UNICODE_STRING { wchat_t* buff, ushort str_len, ushort buff_len } и им норм. Библиотека функций для Си вообще не обязана присутствовать. Она просто немного упрощает жизнь. Кстати, указания размера буфера отдельным числом, не является хорошей практикой. Завтра размер буфера станет 8 вместо 10, а copy_lenght так и останется 10.
Ответить | Правка | К родителю #76 | Наверх | Cообщить модератору

62. "Проект Curl избавился от использования функции strcpy в коде"  –1 +/
Сообщение от Аноним (62), 31-Дек-25, 13:39 
Недавно смотрел код этой библиотеки. Код страшноват даже по меркам си. С модульностью как-то тоже не очень, один здоровый монолит. Даже не ясно, кто в здравом уме будет это поддерживать, если автор отойдёт от дел.
Ответить | Правка | Наверх | Cообщить модератору

70. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Аноним (71), 31-Дек-25, 13:53 
ИИ будет поддерживать.
Ответить | Правка | Наверх | Cообщить модератору

119. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от zionist (ok), 31-Дек-25, 15:23 
Адаптированный пример использования 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;
}


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

Ответить | Правка | Наверх | Cообщить модератору

120. "Проект Curl избавился от использования функции strcpy в коде"  +/
Сообщение от Кошкажена (?), 31-Дек-25, 15:23 
Почему не сделать структуру строки с размером, например, как в Glib?
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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