https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116834

            Bug ID: 116834
           Summary: "warning: null format string" false positive with
                    UBSAN
           Product: gcc
           Version: 14.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: other
          Assignee: unassigned at gcc dot gnu.org
          Reporter: kasper93 at gmail dot com
  Target Milestone: ---

Hello,

I got the following warning:

test.c: In function 'foo':
test.c:7:5: warning: null format string [-Wformat-truncation=]
    7 |     vsnprintf(NULL, 0, fmt, ap);
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~


When compiling the code with `gcc -fsanitize=undefined -Wformat -O2`

#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>

void foo(const char *fmt, va_list ap)
{
    vsnprintf(NULL, 0, fmt, ap);

    if (!fmt)
        abort();
}

This issue only occurs with UBSAN. The example provided is minimized and may
not make much sense. The main point is that if there is a check for the `fmt`
value after the `vsnprintf()` call, it will trigger a warning like the one
above. This warning is incorrect because the compiler cannot determine whether
the value is null at compile time in this case.

Reply via email to