Re: [PATCH] fix format security

Collin Funk <[email protected]>
Newsgroups gmane.editors.poke.devel,gmane.comp.lib.gnulib.bugs
Message-ID <[email protected]>
Bruno Haible <[email protected]> writes:

> Paul Eggert wrote:
>> > It is a bit unfortunate that this warning comes up almost monthly
>> 
>> Perhaps we should add something like the following to
>> gnulib/lib/gettext.h, once we have a Clang bug report number?
>> Although drastic, this would save us time and we'd still get static
>> checking when compiling with GCC, except for printf calls in
>> clang-only code (which should be rare).
>> 
>> /* Pacify clang false alarm
>>     <https://github.com/llvm/llvm-project/issues/987654321>.  */
>> #ifdef __clang__
>> # pragma clang diagnostic ignored "-Wformat-security"
>> #endif
>
> Nice idea. But I still [1] think that it is too drastic. Some people
> might be really upset.

Yes, it is probably a bit excessive. The warning is generally helpful
outside of this specific instance.

I was preparing a bug report for Clang, and think I found out how to fix
the issue.  See the following program:

    $ cat example.c 
    #include <stdio.h>
    #include <stdlib.h>
    #ifdef ENABLE_NLS
    # include <libintl.h>
    #else
    __attribute__ ((__always_inline__, __gnu_inline__,
                    __format_arg__ (1)))
    extern inline char const *
    gettext (const char *msgid)
    {
      return msgid;
    }
    #endif
    #define _(msgid) gettext (msgid)
    int
    main (void)
    {
      /* No warning.  */
      printf (_("Hello, %s!\n"), "world");
      /* Warning.  */
      printf (_("Hello, world!\n"));
      return EXIT_SUCCESS;
    }
    $ clang -Wformat-security example.c

So, adding "__format_arg__ (1)" in this instance will silence it.

If that sounds okay, I'll figure out what version of GCC and Clang added
them and submit a patch.

Collin
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.