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

            Bug ID: 117780
           Summary: -fsanitize=undefined -O1 false positive ‘%s’ directive
                    argument is null [-Wformat-truncation=]
           Product: gcc
           Version: 14.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: sanitizer
          Assignee: unassigned at gcc dot gnu.org
          Reporter: yansendao at 126 dot com
                CC: dodji at gcc dot gnu.org, dvyukov at gcc dot gnu.org,
                    jakub at gcc dot gnu.org, kcc at gcc dot gnu.org
  Target Milestone: ---

Created attachment 59703
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=59703&action=edit
testcase

> gcc -Wno-unused-function -Wall -c -fsanitize=undefined -O1 
> ~/compiler-test/openjdk/patchs/asan/java-format-truncation-creduce.c
/home/yansendao/compiler-test/openjdk/patchs/asan/java-format-truncation-creduce.c:
In function ‘az’:
/home/yansendao/compiler-test/openjdk/patchs/asan/java-format-truncation-creduce.c:12:21:
warning: ‘%s’ directive argument is null [-Wformat-truncation=]
   12 |   snprintf(&aj, an, am, c);
      |                     ^~

> cat ~/compiler-test/openjdk/patchs/asan/java-format-truncation-creduce.c
//gcc -Wno-unused-function -Wall -c -fsanitize=undefined -O1
~/compiler-test/openjdk/patchs/asan/java-format-truncation-creduce.c
char aj;
int snprintf(char *, unsigned long, const char *, ...);
unsigned long strlen(const char *);
void a();
char *b();
void az() {
  char *c, *al = 0;
  static const char am[] = "Djava.class.path=%s";
  c = b();
  long an = strlen(c);
  snprintf(&aj, an, am, c);
  if (c != al)
    a();
}

Reply via email to