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