Author: brane
Date: Wed Jun  3 11:03:37 2026
New Revision: 1934920

Log:
Use snprintf instead of sprintf if it's available.

* CMakeLists.txt: Check for snprintf.
* build/ac-macros/compiler.m4: Check for snprintf.

* subversion/svn/filesize.c: Include svn_private_config.h.
  (format_size): Use snprintf if it's available.

* subversion/tests/libsvn_subr/skel-test.c: Include svn_private_config.h.
  (put_explicit_length): Use snprintf if it's available.

Modified:
   subversion/trunk/CMakeLists.txt
   subversion/trunk/build/ac-macros/compiler.m4
   subversion/trunk/subversion/svn/filesize.c
   subversion/trunk/subversion/tests/libsvn_subr/skel-test.c

Modified: subversion/trunk/CMakeLists.txt
==============================================================================
--- subversion/trunk/CMakeLists.txt     Wed Jun  3 10:44:38 2026        
(r1934919)
+++ subversion/trunk/CMakeLists.txt     Wed Jun  3 11:03:37 2026        
(r1934920)
@@ -872,6 +872,8 @@ macro(autocheck_symbol_exists SYMBOL FIL
   endif()
 endmacro()
 
+autocheck_symbol_exists("snprintf" "string.h" HAVE_SNPRINTF)
+
 autocheck_include_files("elf.h" HAVE_ELF_H)
 autocheck_include_files("inttypes.h" HAVE_INTTYPES_H)
 autocheck_include_files("stdbool.h" HAVE_STDBOOL_H)

Modified: subversion/trunk/build/ac-macros/compiler.m4
==============================================================================
--- subversion/trunk/build/ac-macros/compiler.m4        Wed Jun  3 10:44:38 
2026        (r1934919)
+++ subversion/trunk/build/ac-macros/compiler.m4        Wed Jun  3 11:03:37 
2026        (r1934920)
@@ -71,6 +71,9 @@ AC_DEFUN([SVN_CC_MODE_SETUP],
     ])
   fi
 
+  dnl check for snprintf so that we can use it instead of sprintf.
+  AC_CHECK_FUNCS(snprintf)
+
   CMODEFLAGS="$CFLAGS"
   CFLAGS=""
   SVN_DOT_CLANGD_CC([$CMODEFLAGS])

Modified: subversion/trunk/subversion/svn/filesize.c
==============================================================================
--- subversion/trunk/subversion/svn/filesize.c  Wed Jun  3 10:44:38 2026        
(r1934919)
+++ subversion/trunk/subversion/svn/filesize.c  Wed Jun  3 11:03:37 2026        
(r1934920)
@@ -31,6 +31,7 @@
 #include <apr_strings.h>
 
 #include "cl.h"
+#include "svn_private_config.h"
 
 
 /*** Code. ***/
@@ -72,16 +73,6 @@ format_size(double human_readable_size,
             apr_size_t index,
             apr_pool_t *result_pool)
 {
-  /* Apple in its infinite wisdom has seen fit to deprecate sprintf() which
-     has been part of the C standard library since the K&R days and is not
-     deprecated in any version of the C standard. */
-#ifdef __APPLE__
-#  if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)
-#    pragma GCC diagnostic push
-#    pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-#  endif
-#endif /* __APPLE__ */
-
   /* NOTE: We want to display a locale-specific decimal sepratator, but
            APR's formatter completely ignores the locale. So we use the
            good, old, standard, *dangerous* sprintf() to format the size.
@@ -107,22 +98,26 @@ format_size(double human_readable_size,
        the absolute size is actually a single-digit number, because
        files can't have fractional byte sizes. */
     if (absolute_human_readable_size >= 10)
-      sprintf(buffer, "%.0f", human_readable_size);
+      {
+#if !HAVE_SNPRINTF
+        sprintf(buffer, "%.0f", human_readable_size);
+#else
+        snprintf(buffer, sizeof(buffer), "%.0f", human_readable_size);
+#endif
+      }
     else
       {
         double integral;
         const double frac = modf(absolute_human_readable_size, &integral);
         const int decimals = (index > 0 && (integral < 9 || frac <= 
.949999999));
+#if !HAVE_SNPRINTF
         sprintf(buffer, "%.*f", decimals, human_readable_size);
+#else
+        snprintf(buffer, sizeof(buffer), "%.*f", decimals, 
human_readable_size);
+#endif
       }
 
     return apr_pstrcat(result_pool, buffer, suffix, SVN_VA_NULL);
-
-#ifdef __APPLE__
-#  if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)
-#    pragma GCC diagnostic pop
-#  endif
-#endif /* __APPLE__ */
 }
 
 

Modified: subversion/trunk/subversion/tests/libsvn_subr/skel-test.c
==============================================================================
--- subversion/trunk/subversion/tests/libsvn_subr/skel-test.c   Wed Jun  3 
10:44:38 2026        (r1934919)
+++ subversion/trunk/subversion/tests/libsvn_subr/skel-test.c   Wed Jun  3 
11:03:37 2026        (r1934920)
@@ -33,6 +33,7 @@
 
 #include "../svn_test.h"
 #include "../svn_test_fs.h"
+#include "svn_private_config.h"
 
 
 /* Some utility functions.  */
@@ -307,24 +308,19 @@ put_explicit_length(svn_stringbuf_t *str
                     apr_size_t len,
                     char sep)
 {
-  /* Apple in its infinite wisdom has seen fit to deprecate sprintf() which
-     has been part of the C standard library since the K&R days and is not
-     deprecated in any version of the C standard. */
-#ifdef __APPLE__
-#  if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)
-#    pragma GCC diagnostic push
-#    pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-#  endif
-#endif /* __APPLE__ */
-
-  char *buf = malloc(len + 100);
+  const apr_size_t alloc_len = len + 100;
+  char *buf = malloc(alloc_len);
   apr_size_t length_len;
 
   if (! skel_is_space(sep))
     abort();
 
   /* Generate the length and separator character.  */
+#if !HAVE_SNPRINTF
   sprintf(buf, "%"APR_SIZE_T_FMT"%c", len, sep);
+#else
+  snprintf(buf, alloc_len, "%"APR_SIZE_T_FMT"%c", len, sep);
+#endif
   length_len = strlen(buf);
 
   /* Copy in the real data (which may contain nulls).  */
@@ -332,12 +328,6 @@ put_explicit_length(svn_stringbuf_t *str
 
   svn_stringbuf_appendbytes(str, buf, length_len + len);
   free(buf);
-
-#ifdef __APPLE__
-#  if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)
-#    pragma GCC diagnostic pop
-#  endif
-#endif /* __APPLE__ */
 }
 
 

Reply via email to