Build: drop printf-like annotations
authorJeremy Harris <jgh146exb@wizmail.org>
Fri, 12 Jul 2024 11:22:11 +0000 (12:22 +0100)
committerJeremy Harris <jgh146exb@wizmail.org>
Tue, 16 Jul 2024 11:23:01 +0000 (12:23 +0100)
src/src/dbfn.c
src/src/functions.h
src/src/mytypes.h
src/src/tod.c

index d1d8c08d475949b4c2bd69df32159473a7347bf6..d64f1927b821533366446fd49c39f5fafa5e620f 100644 (file)
@@ -145,7 +145,7 @@ open_db *
 dbfn_open(const uschar * name, int flags, open_db * dbblock,
   BOOL lof, BOOL panic)
 {
-int rc, save_errno;
+int rc, save_errno, dlen, flen;
 flock_t lock_data;
 uschar dirname[PATHLEN], filename[PATHLEN];
 
@@ -164,8 +164,11 @@ make the directory as well, just in case. We won't be doing this many times
 unnecessarily, because usually the lock file will be there. If the directory
 exists, there is no error. */
 
-snprintf(CS dirname, sizeof(dirname), "%s/db", spool_directory);
-snprintf(CS filename, sizeof(filename), "%s/%s.lockfile", dirname, name);
+dlen = snprintf(CS dirname, sizeof(dirname), "%s/db", spool_directory);
+flen = Ustrlen(name);
+snprintf(CS filename, sizeof(filename), "%.*s/%.*s.lockfile",
+         (int)sizeof(filename) - dlen - flen - 11, dirname,
+         flen, name);
 
 dbblock->lockfd = -1;
 if (!exim_lockfile_needed())
@@ -189,7 +192,7 @@ it easy to pin this down, there are now debug statements on either side of the
 open call. */
 
 flags &= O_RDONLY | O_RDWR;
-snprintf(CS filename, sizeof(filename), "%s/%s", dirname, name);
+snprintf(CS filename, sizeof(filename), "%.*s/%s", dlen, dirname, name);
 
 priv_drop_temp(exim_uid, exim_gid);
 dbblock->dbptr = exim_dbopen(filename, dirname, flags, EXIMDB_MODE);
@@ -244,7 +247,7 @@ starting a transaction.  "lof" and "panic" always true; read/write mode.
 open_db *
 dbfn_open_multi(const uschar * name, int flags, open_db * dbblock)
 {
-int rc, save_errno;
+int rc, save_errno, dlen;
 flock_t lock_data;
 uschar dirname[PATHLEN], filename[PATHLEN];
 
@@ -253,8 +256,8 @@ DEBUG(D_hints_lookup) acl_level++;
 dbblock->lockfd = -1;
 db_dir_make(TRUE);
 
-snprintf(CS dirname, sizeof(dirname), "%s/db", spool_directory);
-snprintf(CS filename, sizeof(filename), "%s/%s", dirname, name);
+dlen = snprintf(CS dirname, sizeof(dirname), "%s/db", spool_directory);
+snprintf(CS filename, sizeof(filename), "%.*s/%s", dlen, dirname, name);
 
 priv_drop_temp(exim_uid, exim_gid);
 dbblock->dbptr = exim_dbopen_multi(filename, dirname, flags, EXIMDB_MODE);
index afb6fd46f65e0b26430b881badbba92be80987ba..21214d15b00a8859527026a2e3a16a6c19b7b442 100644 (file)
@@ -1256,12 +1256,13 @@ timediff(diff, then);
 static inline uschar *
 string_timediff(const struct timeval * diff)
 {
-static uschar buf[sizeof("0.000s")];
+static uschar buf[16];
 
 if (diff->tv_sec >= 5 || !LOGGING(millisec))
   return readconf_printtime((int)diff->tv_sec);
 
-snprintf(CS buf, sizeof(buf), "%u.%03us", (uint)diff->tv_sec, (uint)diff->tv_usec/1000);
+snprintf(CS buf, sizeof(buf), "%u.%03us",
+         (uint)diff->tv_sec, (uint)diff->tv_usec/1000);
 return buf;
 }
 
index c39083be8a4133785cb64ab10c1ef4b1f746e528..cac4ee3c9a435c03e20c9c38b8d57b3e11de6ab0 100644 (file)
@@ -30,15 +30,13 @@ local_scan.h includes it and exim.h includes them both (to get this earlier). */
 #endif
 
 
-/* If gcc is being used to compile Exim, we can use its facility for checking
-the arguments of printf-like functions. This is done by a macro.
-OpenBSD has unfortunately taken to objecting to use of %n in printf
-so we have to give up on all of the available parameter checking. */
+/* We gave up on trying to get compilers to check on printf-like functions
+because they are both whiney about value sizes where they cannot do decent
+static analysis, and incapable of handling extensions to printf formats.
+The annotation on functions is still in place but does nothing. */
 
 #if defined(__GNUC__) || defined(__clang__)
-# ifndef __OpenBSD__
-#  define PRINTF_FUNCTION(A,B) __attribute__((format(printf,A,B)))
-# endif
+/* #  define PRINTF_FUNCTION(A,B)      __attribute__((format(printf,A,B))) */
 # define ARG_UNUSED            __attribute__((__unused__))
 # define FUNC_MAYBE_UNUSED     __attribute__((__unused__))
 # define WARN_UNUSED_RESULT    __attribute__((__warn_unused_result__))
index 364703d536bb2607d2b3a67c59e7acb0e8046fa6..560f69bee3561de12d30f93893f19bac89b9fa82 100644 (file)
@@ -169,6 +169,7 @@ switch(type)
            diff_min += (local.tm_yday > gmt->tm_yday) ? 1440 : -1440;
          diff_hour = diff_min/60;
          diff_min  = abs(diff_min - diff_hour*60);
+         diff_min &= 63;                       /* compiler quietening */
          }
        else                                    /* subminute offset, eg. TAI */
          {