[devel] Добавление -Werror=format-security

Dmitry V. Levin ldv на altlinux.org
Чт Июн 4 01:23:47 MSD 2009


On Wed, Jun 03, 2009 at 02:49:35PM +0300, Led wrote:
> On Wednesday 03 June 2009 14:20:01 Dmitry V. Levin wrote:
> > On Wed, Jun 03, 2009 at 02:54:21PM +0400, Dmitry V. Levin wrote:
> > > On Wed, Jun 03, 2009 at 05:21:02AM +0400, Vitaly Lipatov wrote:
> > > > Есть предложение добавить в стандартные флаги (CFLAGS)
> > > > -Werror=format-security
> > > > Предотвращает конструкции вида
> > > > *printf(msg)
> > > > где msg - форматная строка неизвестного содержания.
> > > > Наткнулся на это в Mandriva.
> > >
> > > В gcc4.4 я включил по умолчанию -Wformat и -Wformat-security,
> > > см. "ALT Linux gcc 4.4.0-alt1" в "info gcc" (там же написано, как это
> > > отключить).
> > >
> > > Добавить -Werror=format-security по умолчанию куда-либо при текущем
> > > уровне несобираемости Сизифа (4.6%), как мне кажется, ещё рано.
> >
> > Точно рано: сломается сборка ещё примерно 800 пакетов, что почти в 2 раза
> > превышает число несобирающихся сейчас пакетов.
> >
> > > Пока что могу посоветовать читать (или хотя бы грепать) логи сборки
> > > пакетов.
> >
> > grep 'warning: format not a string literal and no format arguments'
> 
> А как правильно предлагается чинить подобное? Я чинил приведением типа и/или 
> заменой *printf на puts/fputs - так можно?

В общем случае функции с атрибутом
__format__(__printf__,STRING-INDEX,FIRST-TO-CHECK)
заменить string на "%s",string.
В случае с printf/fprintf можно заменить и на fputs.
Замена на puts обычно не подходит из-за слегка отличающегося поведения.


-- 
ldv
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : отсутствует
Тип     : application/pgp-signature
Размер  : 197 байтов
Описание: отсутствует
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20090604/3f62a6a4/attachment.bin>


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