[devel] IA: destination buffer overflow - ppp

Damir Shayhutdinov =?iso-8859-1?q?damir_=CE=C1_altlinux=2Eorg?=
Ср Ноя 28 16:00:59 MSK 2007


> > 2007/11/27, Dmitry V. Levin <ldv на altlinux.org>:
> > > On Tue, Nov 27, 2007 at 06:32:40PM +0300, Dmitriy Khanzhin wrote:
> > > > -     strncat(ttyname, name, sizeof(ttyname));
> >
> > + strncat(ttyname, name, sizeof(ttyname)-1);
> >
> > > Автор этого кода не справился с функцией strncat.
> > > Исправление тривиально.
> >
> > Фикс должен быть таким (см. выше)? Или нет?
>
> Да, таким.
Я честно говоря нечасто пользуюсь strncat, но разве третий параметр
означает размер буфера dest? Если верить стандарту C, он означает
максимальное количество символов из src, которое будет приклеено к
dest. Следовательно, strncat(ttyname, name, sizeof(ttyname)-1) сделает
следующее - к тому что уже имеется в ttyname, добавит еще максимум
sizeof(ttyname) - 1 байт. Явное же переполнение будет, на
strlen(ttyname) перед strncat.

Так что правильнее будет strncat(ttyname, name, sizeof(ttyname) -
strlen(ttyname) - 1, или просто
strlcat(ttyname, name, sizeof(ttyname)).


Подробная информация о списке рассылки Devel