[devel] IA: destination buffer overflow - ppp
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Ср Ноя 28 13:34:38 MSK 2007
On Wed, Nov 28, 2007 at 01:21:42PM +0300, Dmitriy Khanzhin wrote:
> Alexey Tourbin пишет:
> > On Wed, Nov 28, 2007 at 12:57:38PM +0300, Dmitriy Khanzhin wrote:
> > Вы что сделать-то хотите? Чтобы gcc не выдавал warning?
>
> Я хочу понять, как оно работает, и сделать, чтобы не было warning'а и
> что-бы работало.
Вы не рубите. Почитайте книжку называется "Си" авторы Керниган и Ритчи.
> > Короче лучше используйте snprintf, там ошибиться сложнее что к чему.
> >
> > Но snprintf это интерпретатор, теряется ЭФФЕККТИВНОСТЬ КОДА!!
> >
> Патч с применением snprintf я показывал вчера
> http://lists.altlinux.org/pipermail/devel/attachments/20071127/72869196/attachment.ksh
> --- ppp-2.4.4/pppd/plugins/radius/clientid.c.orig 2007-09-29 16:38:20 +0400
> +++ ppp-2.4.4/pppd/plugins/radius/clientid.c 2007-11-27 09:08:24 +0300
> @@ -104,18 +104,29 @@
> UINT4 rc_map2id(char *name)
> {
> struct map2id_s *p;
> - char ttyname[PATH_MAX];
> + char *ttyname;
> + int ttyname_len=0;
> + char prefix_dev[6];
>
> - *ttyname = '\0';
> - if (*name != '/')
> - strcpy(ttyname, "/dev/");
> -
> - strncat(ttyname, name, sizeof(ttyname));
> + *prefix_dev = "";
> + ttyname_len = strlen(name)+1;
> +
> + if (*name != '/') {
> + *prefix_dev = "/dev/";
Не беритесь, не беритесь, не беритесь за то чего Вы не понимаете.
> + ttyname_len = ttyname_len+strlen(prefix_dev);
> + }
> +
> + ttyname = calloc(ttyname_len, sizeof(char));
> + snprintf(ttyname, ttyname_len, "%s%s", prefix_dev, name);
>
> for(p = map2id_list; p; p = p->next)
> - if (!strcmp(ttyname, p->name)) return p->id;
> + if (!strcmp(ttyname, p->name)) {
> + free(ttyname);
> + return p->id;
> + }
>
> warn("rc_map2id: can't find tty %s in map database", ttyname);
>
> + free(ttyname);
> return 0;
> }
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?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/3dd4276d/attachment-0002.bin>
Подробная информация о списке рассылки Devel