The OpenNET Project / Index page

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



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

Оглавление

Обновление libpng 1.6.27 с устранением уязвимости, opennews (??), 30-Дек-16, (0) [смотреть все]

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


31. "Обновление libpng 1.6.27 с устранением уязвимости"  +/
Сообщение от Crazy Alex (ok), 30-Дек-16, 14:59 
Но вообще все давно в курсе, что scanf - не идеал ни разу, и обычно лучше применять отдельное строки и strtoX()
Ответить | Правка | К родителю #27 | Наверх | Cообщить модератору

40. "Обновление libpng 1.6.27 с устранением уязвимости"  +/
Сообщение от Аноним (-), 30-Дек-16, 17:29 
> Но вообще все давно в курсе, что scanf - не идеал ни
> разу, и обычно лучше применять отдельное строки и strtoX()

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

Для strtoX прийдётся так или иначе реализовывать чтение данных с потока ввода (но уже своими силами), но это мало что даёт. Мало того, при использовании strtoX можно столкнуться с большой проблемой. С одной стороны всё равно нужно анализировать errno на ошибки, а с другой errno выставляется при значении, равном 0. Но откуда мы знаем, что errno в этом случае был выставлен именно нашим вызовом, а а не вызовом из сторонней библиотеки, в код которой мы даже не заглядывали. А может быть он вообще остался в том же значении ещё с прошлого вызова нашей же функции, а пользователь просто ввёл 0.

Увы, я уже видел достаточно примером кода, где ошибки игнорируют, используют небезопасные функции, либо используют стиль обработки ошибок lazy (assert по любой ошибке). А основной причиной является стандартизация небезопасных функций, которые просто исторически используются и от которых уже невозможно отказаться без потери обратной совместимности.

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

45. "Обновление libpng 1.6.27 с устранением уязвимости"  +/
Сообщение от Crazy Alex (ok), 30-Дек-16, 20:01 
Разумеется - читаем в буфер, токенизируем (а то и полноценный разбор), потому преобразования. Ситуации, когда это не нужно - экзотика, в общем-то.

Насчёт errno - вообще чушь, простите. Устанавливайте его в 0 непосредственно до вызова функции, проверйте сразу после - и всё отловите.

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

59. "Обновление libpng 1.6.27 с устранением уязвимости"  +2 +/
Сообщение от Аноним (-), 31-Дек-16, 09:41 
> Насчёт errno - вообще чушь, простите. Устанавливайте его в 0 непосредственно до
> вызова функции, проверйте сразу после - и всё отловите.

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

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

61. "Обновление libpng 1.6.27 с устранением уязвимости"  –1 +/
Сообщение от Michael Shigorinemail (ok), 31-Дек-16, 14:40 
> считаю, что необходимо популяризовать подобные примеры ошибочного кода с объяснениями

Может, попробовать в рамках http://rosettacode.org ?  Примеры там уже есть, остаётся предложить рубрику контрпримеров.

PS: пришлось добавить пробел, автолинкер захватил лишнего.

PPS: надо же, читаю тут http://odnako.su/hi-tech/pc-hardware/-483565-obzor-i-sravnit.../ и вижу на перекликающуюся тему:

---
Также можно использовать примеры из коллекции SAMATE американского института NIST.
---

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

62. "Обновление libpng 1.6.27 с устранением уязвимости"  +/
Сообщение от Аноним (-), 31-Дек-16, 15:34 
> Может, попробовать в рамках http://rosettacode.org ?  Примеры там уже есть, остаётся предложить рубрику контрпримеров.

Я лишь подаю идеи, моего энтузиазма и свободного времени хватает пока только на opensource-разработку. Но по факту все возможные ситуации расписаны на сайте CERT (там не только язык Си).  Любому считающему себя профессиональным программистом CERT обязателен к прочтению. Я мог бы привести примеры посложнее, ответ в которых предсказать правильно смогут немногие. Одну из придуманных задачек давал своим ребятам, никто не смог правильно ответить на результат простого выражения.

> PPS: надо же, читаю тут http://odnako.su/hi-tech/pc-hardware/-483565-obzor-i-sravnit.../ и вижу на перекликающуюся тему:

Спасибо за ссылку, почитаю на досуге.

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

63. "Обновление libpng 1.6.27 с устранением уязвимости"  +/
Сообщение от Аноним (-), 31-Дек-16, 17:41 
Интересные советы там даются по написанию кода под Эльбрус. Из них можно сделать вывод, что с приложениями, написанными под x86, будут большие проблемы в производительности. Особенно большие будут по части межкомпьютерного протокольного обмена. Там используются невыровненные типы данных и упакованные структуры. А вот рекомендации по использованию static inline очень удивили. Я привык к обратному, использовать static inline только как замену большим макросам, т.к. упрощает процесс разработки и читабельность кода. В остальном же выгоднее использовать функции, если они часто вызываются, т.к. постоянное использование static inline будет просто напросто забивать будет TLB, из-за чего будет падать производительность.
Ответить | Правка | К родителю #61 | Наверх | Cообщить модератору

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

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




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

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