On 2021/09/20 13:09, Renaud Allard wrote: > > > On 9/20/21 11:32 AM, Stuart Henderson wrote: > > On 2021/09/20 10:29, Stuart Henderson wrote: > > > Some of these are pretty hairy and it's a moving codebase. Since they > > > are applying compiler "printf-like" attribute to functions which are > > > using their own functions rather than libc printf, and we are purely > > > making this change to disable the spurious warning because there is > > > no abort in their %n handling, can't we just disable the annotations > > > instead? > > > > actually my patch comment is too short, maybe this instead > > > > Don't do printf-like checks on Exim's internal printf-like functions on > > OpenBSD. libc printf functions abort() on %n use, and the compiler has > > been modified to warn about this; however this does not apply to Exim's > > functions which do still support %n. > > > > > > This is more a political decision on what we are trying to solve here, > compiler warnings or secure coding practices. In the end, I would like to > have Theo's point of view.
The other patch doesn't solve anything other than false-positive warnings, because the implementation of their printf-like functions still supports %n. > > > > > Index: patches/patch-src_mytypes_h > > > =================================================================== > > > RCS file: patches/patch-src_mytypes_h > > > diff -N patches/patch-src_mytypes_h > > > --- /dev/null 1 Jan 1970 00:00:00 -0000 > > > +++ patches/patch-src_mytypes_h 20 Sep 2021 09:28:21 -0000 > > > @@ -0,0 +1,20 @@ > > > +$OpenBSD$ > > > + > > > +Don't do printf-like checks on OpenBSD, which warn about %n use. > > > + > > > +Index: src/mytypes.h > > > +--- src/mytypes.h.orig > > > ++++ src/mytypes.h > > > +@@ -33,7 +33,11 @@ local_scan.h includes it and exim.h includes them both > > > + the arguments of printf-like functions. This is done by a macro. */ > > > + > > > + #if defined(__GNUC__) || defined(__clang__) > > > +-# define PRINTF_FUNCTION(A,B) __attribute__((format(printf,A,B))) > > > ++# if defined(__OpenBSD__) > > > ++# define PRINTF_FUNCTION(A,B) /**/ > > > ++# else > > > ++# define PRINTF_FUNCTION(A,B) __attribute__((format(printf,A,B))) > > > ++# endif > > > + # define ARG_UNUSED __attribute__((__unused__)) > > > + # define WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) > > > + # define ALLOC __attribute__((malloc)) > > > > > > > > > > > >