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

Damir Shayhutdinov damir на altlinux.org
Ср Июн 3 15:59:10 MSD 2009


>> А как правильно предлагается чинить подобное? Я чинил приведением типа и/или
>> заменой *printf на puts/fputs - так можно?
>
> puts/fputs или printf("%s", str); Лучше первое.

Причем обе конструкции компилируются в один и тот же код, при -O2.

Вот, сравните:

#include <stdio.h>

int main(void)
{
        const char* p = "test!\n";
        printf("%s", p);
        puts(p);
        return 0;
}


08048390 <main>:
 8048390:       8d 4c 24 04             lea    0x4(%esp),%ecx
 8048394:       83 e4 f0                and    $0xfffffff0,%esp
 8048397:       ff 71 fc                pushl  0xfffffffc(%ecx)
 804839a:       55                      push   %ebp
 804839b:       89 e5                   mov    %esp,%ebp
 804839d:       51                      push   %ecx
 804839e:       83 ec 10                sub    $0x10,%esp
 80483a1:       68 a0 84 04 08          push   $0x80484a0
 80483a6:       e8 e9 fe ff ff          call   8048294 <puts на plt>
 80483ab:       c7 04 24 a6 84 04 08    movl   $0x80484a6,(%esp)
 80483b2:       e8 dd fe ff ff          call   8048294 <puts на plt>
 80483b7:       8b 4d fc                mov    0xfffffffc(%ebp),%ecx
 80483ba:       31 c0                   xor    %eax,%eax
 80483bc:       c9                      leave
 80483bd:       8d 61 fc                lea    0xfffffffc(%ecx),%esp
 80483c0:       c3                      ret

И там и там вызывается puts на plt.


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