[devel] IA: destination buffer overflow - ppp

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Ср Ноя 28 19:35:18 MSK 2007


On Wed, Nov 28, 2007 at 02:37:07PM +0300, Alexander Bokovoy wrote:
> Alexey Tourbin пишет:
> > On Wed, Nov 28, 2007 at 12:35:52PM +0300, Alexander Bokovoy wrote:
> >> Еще бы оно работало. Вы же просто повторили ерунду за авторами этого
> >> плагина. sizeof(ttyname), как и sizeof(name), равносильны sizeof(char *)
> >> и равны размеру указателя, но никак не размеру строки. Там нужно
> >> использовать strlen(ttyname).
> > 
> > UINT4 rc_map2id(char *name)
> > {               
> >         struct map2id_s *p;
> >         char ttyname[PATH_MAX];
> > 
> >         *ttyname = '\0';
> >         if (*name != '/')
> >                 strcpy(ttyname, "/dev/");
> >         
> >         strncat(ttyname, name, sizeof(ttyname));
> >                 
> >         for(p = map2id_list; p; p = p->next)
> >                 if (!strcmp(ttyname, p->name)) return p->id;
> >                 
> >         warn("rc_map2id: can't find tty %s in map database", ttyname);
> >                 
> >         return 0;                                                                                                           
> > }                                                                                                                            
> > 
> > Есть любители кодить на язычке Си всякие прикладные вещи.
> > И там это ещё называется "качество кода" или как-то так.
> Это не качество кода, это несоответствие занимаемой должности. :-)

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

Язык Си нужен для _реализации_ эффективной работы со строками, для
_реализации_ грамотной стратегии автоматического управления памятью
и т.п.  Это между прочим половинчато и наблюдается в менее тривиальном
сишном коде -- например, в postfix или vsftpd есть свои мини-библиотеки
для работы со строками, а в libxml2 в базовой структуре данных
xmlExpNode имеется поле "счётчик ссылок".

Так что когда есть возможность не писать на Си, а писать на чём угодно --
на шелле, awk, перле, питоне -- стоит этой возможностью воспользоваться.
Впрочем, у меня есть и иные смутные соображения, на чём нужно писать.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20071128/645e77b3/attachment-0002.bin>


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