[devel] IA: destination buffer overflow - ppp
Хихин Руслан
=?iso-8859-1?q?hihin_=CE=C1_yandex=2Eru?=
Чт Ноя 29 09:28:53 MSK 2007
Здравствуйте Денис Смирнов
В сообщении от 29 ноября 2007 Денис Смирнов написал(a):
> On Wed, Nov 28, 2007 at 02:33:28PM +0300, Dmitry V. Levin wrote:
> > > >> - strncat(ttyname, name, sizeof(ttyname));
> >>
> >> + strncat(ttyname, name, sizeof(ttyname)-1);
> >>
> > >> Автор этого кода не справился с функцией strncat.
> > >> Исправление тривиально.
> >> Фикс должен быть таким (см. выше)? Или нет?
> DVL> Да, таким.
>
>
>
> Правильно ли я понял, что:
> strlcat(ttyname, name, sizeof(ttyname));
> будет лучшим решением?
>
> А также изменить размер ttyname с PATH_MAX на PATH_MAX + 1 (с учетом
> '\0'
> на конце)?
В принципе да.
Тут ещё стоит обратить внимание на сам размер PATH_MAX.
В 90% случаях этот размер излишний. А так-как массив символов создаётся
внутри функции, то идут излишние действия по его созданию. Возможно,
его-бы следовало сделать глобальным (вернее указатель на строку) и
создавать динамически по реальному размеру строки, насколько я помню
(если не путаю), getline это позволяет, плюс можно посчитать сколько
реально нужно с случае, если оператор ввёл вместо /dev/ttyS0 просто
ttyS0.
Впрочем это надо смотреть код всей программы - возможно там можно как-то
это обойти. Как я понимаю, такие большие массивы появляются из желания
программиста не допустить переполнения буфера при вводе строки
оператором, так что, тут надо быть внимательным, и действия по
переделыванию кода делать осмысленные :)
--
С уважением Хихин Руслан
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: This is a digitally signed message part.
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20071129/2d838053/attachment-0002.bin>
Подробная информация о списке рассылки Devel