format-truncation

Kalamatee kalamatee@gmail.com
Thu Feb 14 10:11:00 GMT 2019


Hello

I am having trouble identifying how to fix the following error we encounter
when compiling AROS using our patched gcc 8.2.

Compile failed: ccache
/home/nick/builds/pc-x86_64-smp-gcc8/bin/linux-x86_64/tools/crosstools/x86_64-aros-gcc
-iquote
/home/nick/builds/pc-x86_64-smp-gcc8/bin/pc-x86_64-smp/Ports/acpica/acpica-unix-20190108/source/components/utilities/
-iquote /mnt/c/Users/kalam/AROS/svn-repo/AROS/arch/all-pc/acpica -iquote .
-mcmodel=large -mno-red-zone -mno-ms-bitfields -O2
-fno-asynchronous-unwind-tables -fno-omit-frame-pointer -Wall -Werror
-Wno-pointer-sign -Wno-parentheses -Wno-strict-aliasing
-I/home/nick/builds/pc-x86_64-smp-gcc8/bin/pc-x86_64-smp/AROS/Developer/include/acpica
-iquote
/home/nick/builds/pc-x86_64-smp-gcc8/bin/pc-x86_64-smp/Ports/acpica/acpica-unix-20190108/source/include
-iquote
/home/nick/builds/pc-x86_64-smp-gcc8/bin/pc-x86_64-smp/Ports/acpica/acpica-unix-20190108/source/include/platform
-DAROS_BUILD_TYPE=AROS_BUILD_TYPE_PERSONAL
-I/home/nick/builds/pc-x86_64-smp-gcc8/bin/pc-x86_64-smp/gen/arch/all-pc/acpica/acpica/include
-include
/home/nick/builds/pc-x86_64-smp-gcc8/bin/pc-x86_64-smp/gen/arch/all-pc/acpica/acpica/include/acpica_deflibdefs.h
-D__SRCFILENAME__="bin/pc-x86_64-smp/Ports/acpica/acpica-unix-20190108/source/components/utilities/utprint.c"
-c
/home/nick/builds/pc-x86_64-smp-gcc8/bin/pc-x86_64-smp/Ports/acpica/acpica-unix-20190108/source/components/utilities/utprint.c
-o
/home/nick/builds/pc-x86_64-smp-gcc8/bin/pc-x86_64-smp/gen/arch/all-pc/acpica/acpica/utprint.o
/home/nick/builds/pc-x86_64-smp-gcc8/bin/pc-x86_64-smp/Ports/acpica/acpica-unix-20190108/source/components/utilities/utprint.c:
In function 'sprintf':
/home/nick/builds/pc-x86_64-smp-gcc8/bin/pc-x86_64-smp/Ports/acpica/acpica-unix-20190108/source/components/utilities/utprint.c:880:14:
error: specified bound 4294967295 exceeds 'INT_MAX'
[-Werror=format-truncation=]
     Length = vsnprintf (String, ACPI_UINT32_MAX, Format, Args);
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
mmakefile:918: recipe for target
'/home/nick/builds/pc-x86_64-smp-gcc8/bin/pc-x86_64-smp/gen/arch/all-pc/acpica/acpica/utprint.o'
failed

My problem is I cannot see where it is getting "INT_MAX" from as the bounds
for the 2nd parameter.

The documentation for vsnprintf says "If the *maxlen* value is 0, no
characters are written, and *vsnprintf* returns 0. If the value is greater
than *INT_MAX* , then *vsnprintf* behaves identically to *vsprintf* in that
no limit checking is done on the number of characters written to the output
area. No warnings concerning length errors are produced by *vsnprintf* ,
and the only indication that the output may have been truncated or is
incomplete is a negative return value."

We expose vsnprintf in our stdio.h as -:
int vsnprintf(char * restrict s, size_t n, const char * restrict format,
 va_list arg);

where size_t is typedef'd as -:
typedef long unsigned int size_t;

and SIZE_MAX is defined -:
#  if __WORDSIZE == 64
#     define SIZE_MAX  UINT64_MAX
#  else
#     define SIZE_MAX  UINT32_MAX
#  endif

Any suggestions on how to approach this would be greatly appreciated.



More information about the Gcc-help mailing list