Re: CI failure on Solaris 11.4

Bruno Haible via Gnulib discussion list <[email protected]>
Newsgroups gmane.comp.lib.gnulib.bugs
Message-ID <3738873.7x91mkYCy2@cagnes>
Pádraig Brady wrote:
> The attached adds an extra configure time check for this issue,
> and I've verified that fixes the issue for numfmt, printf, seq on Solaris.

Thanks for the investigation and fix.

I'm adding this patch
  - to document the issue,
  - to add a test case. (We should not need to run the coreutils test suite
    in order to detect whether vasnprintf is working right.)

Bruno
0001-Add-unit-tests-and-doc-for-the-Lf-large-precision-is.patch (text/x-patch, 10 KB)
From 78a859110fdbd297cedaa8bbba132c60976bfb4c Mon Sep 17 00:00:00 2001
From: Bruno Haible <[email protected]>
Date: Fri, 14 Aug 2026 19:56:38 +0200
Subject: [PATCH] Add unit tests and doc for the %Lf large precision issue on
 Solaris.

* tests/test-vasnprintf-posix.c (test_function): Add a testcase for
"%.5119Lf".
* tests/test-vasprintf-posix.c (test_function): Likewise.
* tests/test-snprintf-posix.h (test_function): Likewise.
* tests/test-sprintf-posix.h (test_function): Likewise.
* tests/test-vasnwprintf-posix.c (test_function): Likewise.
* doc/posix-functions/*printf.texi: Document the Solaris 11.4 bug.
---
 ChangeLog                          | 11 +++++++++++
 doc/posix-functions/fprintf.texi   |  2 +-
 doc/posix-functions/printf.texi    |  2 +-
 doc/posix-functions/snprintf.texi  |  2 +-
 doc/posix-functions/sprintf.texi   |  2 +-
 doc/posix-functions/vfprintf.texi  |  2 +-
 doc/posix-functions/vprintf.texi   |  2 +-
 doc/posix-functions/vsnprintf.texi |  2 +-
 doc/posix-functions/vsprintf.texi  |  2 +-
 tests/test-snprintf-posix.h        | 13 ++++++++++++-
 tests/test-sprintf-posix.h         | 13 ++++++++++++-
 tests/test-vasnprintf-posix.c      | 14 ++++++++++++++
 tests/test-vasnwprintf-posix.c     | 14 ++++++++++++++
 tests/test-vasprintf-posix.c       | 14 ++++++++++++++
 14 files changed, 85 insertions(+), 10 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 5ebd27d047..65793e578c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2026-08-14  Bruno Haible  <[email protected]>
+
+	Add unit tests and doc for the %Lf large precision issue on Solaris.
+	* tests/test-vasnprintf-posix.c (test_function): Add a testcase for
+	"%.5119Lf".
+	* tests/test-vasprintf-posix.c (test_function): Likewise.
+	* tests/test-snprintf-posix.h (test_function): Likewise.
+	* tests/test-sprintf-posix.h (test_function): Likewise.
+	* tests/test-vasnwprintf-posix.c (test_function): Likewise.
+	* doc/posix-functions/*printf.texi: Document the Solaris 11.4 bug.
+
 2026-08-14  Pádraig Brady  <[email protected]>
 
 	tests: avoid -Wformat= warning re unsigned mismatch
diff --git a/doc/posix-functions/fprintf.texi b/doc/posix-functions/fprintf.texi
index 2b0f2cb7e2..8e6ef3a3e9 100644
--- a/doc/posix-functions/fprintf.texi
+++ b/doc/posix-functions/fprintf.texi
@@ -103,7 +103,7 @@
 This function mishandles large floating point precisions
 (for example, formatting 1.0 with @samp{"%.511f"})
 on some platforms:
-Solaris 10.
+Solaris 11.4.
 @item
 This function produces wrong output for the @samp{lc} directive with a NUL
 wide character argument on some platforms:
diff --git a/doc/posix-functions/printf.texi b/doc/posix-functions/printf.texi
index f57c16ba47..47167fdea2 100644
--- a/doc/posix-functions/printf.texi
+++ b/doc/posix-functions/printf.texi
@@ -103,7 +103,7 @@
 This function mishandles large floating point precisions
 (for example, formatting 1.0 with @samp{"%.511f"})
 on some platforms:
-Solaris 10.
+Solaris 11.4.
 @item
 This function produces wrong output for the @samp{lc} directive with a NUL
 wide character argument on some platforms:
diff --git a/doc/posix-functions/snprintf.texi b/doc/posix-functions/snprintf.texi
index 23dd6704fa..ba2578b2ba 100644
--- a/doc/posix-functions/snprintf.texi
+++ b/doc/posix-functions/snprintf.texi
@@ -102,7 +102,7 @@
 This function mishandles large floating point precisions
 (for example, formatting 1.0 with @samp{"%.511f"})
 on some platforms:
-Solaris 10.
+Solaris 11.4.
 @item
 This function produces wrong output for the @samp{lc} directive with a NUL
 wide character argument on some platforms:
diff --git a/doc/posix-functions/sprintf.texi b/doc/posix-functions/sprintf.texi
index 8dd59ed611..2948797c6b 100644
--- a/doc/posix-functions/sprintf.texi
+++ b/doc/posix-functions/sprintf.texi
@@ -90,7 +90,7 @@
 This function mishandles large floating point precisions
 (for example, formatting 1.0 with @samp{"%.511f"})
 on some platforms:
-Solaris 10.
+Solaris 11.4.
 @item
 This function produces wrong output for the @samp{lc} directive with a NUL
 wide character argument on some platforms:
diff --git a/doc/posix-functions/vfprintf.texi b/doc/posix-functions/vfprintf.texi
index feaa2318c1..52b9491a63 100644
--- a/doc/posix-functions/vfprintf.texi
+++ b/doc/posix-functions/vfprintf.texi
@@ -103,7 +103,7 @@
 This function mishandles large floating point precisions
 (for example, formatting 1.0 with @samp{"%.511f"})
 on some platforms:
-Solaris 10.
+Solaris 11.4.
 @item
 This function produces wrong output for the @samp{lc} directive with a NUL
 wide character argument on some platforms:
diff --git a/doc/posix-functions/vprintf.texi b/doc/posix-functions/vprintf.texi
index 1256971aec..97bf877a1a 100644
--- a/doc/posix-functions/vprintf.texi
+++ b/doc/posix-functions/vprintf.texi
@@ -103,7 +103,7 @@
 This function mishandles large floating point precisions
 (for example, formatting 1.0 with @samp{"%.511f"})
 on some platforms:
-Solaris 10.
+Solaris 11.4.
 @item
 This function produces wrong output for the @samp{lc} directive with a NUL
 wide character argument on some platforms:
diff --git a/doc/posix-functions/vsnprintf.texi b/doc/posix-functions/vsnprintf.texi
index 8a6ca05706..f23e3967a5 100644
--- a/doc/posix-functions/vsnprintf.texi
+++ b/doc/posix-functions/vsnprintf.texi
@@ -99,7 +99,7 @@
 This function mishandles large floating point precisions
 (for example, formatting 1.0 with @samp{"%.511f"})
 on some platforms:
-Solaris 10.
+Solaris 11.4.
 @item
 This function produces wrong output for the @samp{lc} directive with a NUL
 wide character argument on some platforms:
diff --git a/doc/posix-functions/vsprintf.texi b/doc/posix-functions/vsprintf.texi
index b94afc2eca..907bf74443 100644
--- a/doc/posix-functions/vsprintf.texi
+++ b/doc/posix-functions/vsprintf.texi
@@ -90,7 +90,7 @@
 This function mishandles large floating point precisions
 (for example, formatting 1.0 with @samp{"%.511f"})
 on some platforms:
-Solaris 10.
+Solaris 11.4.
 @item
 This function produces wrong output for the @samp{lc} directive with a NUL
 wide character argument on some platforms:
diff --git a/tests/test-snprintf-posix.h b/tests/test-snprintf-posix.h
index d7a3b4eda2..18d285b05b 100644
--- a/tests/test-snprintf-posix.h
+++ b/tests/test-snprintf-posix.h
@@ -79,7 +79,7 @@ static void
 test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
 {
   char buf[8];
-  char result[5000];
+  char result[10000];
 
   /* Test return value convention.  */
 
@@ -2955,6 +2955,17 @@ test_function (int (*my_snprintf) (char *, size_t, const char *, ...))
     ASSERT (retval == strlen (result));
   }
 
+  {
+    int retval =
+      my_snprintf (result, sizeof (result), "%.5119Lf %d", 1.0L, 99);
+    ASSERT (result[0] == '1');
+    ASSERT (result[1] == '.');
+    for (size_t i = 0; i < 5119; i++)
+      ASSERT (result[2 + i] == '0');
+    ASSERT (streq (result + 2 + 5119, " 99"));
+    ASSERT (retval == strlen (result));
+  }
+
   {
     char input[5000];
     int retval;
diff --git a/tests/test-sprintf-posix.h b/tests/test-sprintf-posix.h
index 40d4be65c6..007b8ba56d 100644
--- a/tests/test-sprintf-posix.h
+++ b/tests/test-sprintf-posix.h
@@ -78,7 +78,7 @@ strisnan (const char *string, size_t start_index, size_t end_index, int uppercas
 static void
 test_function (int (*my_sprintf) (char *, const char *, ...))
 {
-  char result[5000];
+  char result[10000];
   char buf[8];
 
   /* Test return value convention.  */
@@ -2942,6 +2942,17 @@ test_function (int (*my_sprintf) (char *, const char *, ...))
     ASSERT (retval == strlen (result));
   }
 
+  {
+    int retval =
+      my_sprintf (result, "%.5119Lf %d", 1.0L, 99);
+    ASSERT (result[0] == '1');
+    ASSERT (result[1] == '.');
+    for (size_t i = 0; i < 5119; i++)
+      ASSERT (result[2 + i] == '0');
+    ASSERT (streq (result + 2 + 5119, " 99"));
+    ASSERT (retval == strlen (result));
+  }
+
   {
     char input[5000];
     int retval;
diff --git a/tests/test-vasnprintf-posix.c b/tests/test-vasnprintf-posix.c
index fe0a59d647..9019f8d460 100644
--- a/tests/test-vasnprintf-posix.c
+++ b/tests/test-vasnprintf-posix.c
@@ -3809,6 +3809,20 @@ test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...))
     free (result);
   }
 
+  {
+    size_t length;
+    char *result =
+      my_asnprintf (NULL, &length, "%.5119Lf %d", 1.0L, 99);
+    ASSERT (result != NULL);
+    ASSERT (result[0] == '1');
+    ASSERT (result[1] == '.');
+    for (size_t i = 0; i < 5119; i++)
+      ASSERT (result[2 + i] == '0');
+    ASSERT (streq (result + 2 + 5119, " 99"));
+    ASSERT (length == strlen (result));
+    free (result);
+  }
+
   {
     char input[5000];
     size_t length;
diff --git a/tests/test-vasnwprintf-posix.c b/tests/test-vasnwprintf-posix.c
index d1b3d6e0bb..765b21b57a 100644
--- a/tests/test-vasnwprintf-posix.c
+++ b/tests/test-vasnwprintf-posix.c
@@ -3813,6 +3813,20 @@ test_function (wchar_t * (*my_asnwprintf) (wchar_t *, size_t *, const wchar_t *,
     free (result);
   }
 
+  {
+    size_t length;
+    wchar_t *result =
+      my_asnwprintf (NULL, &length, L"%.5119Lf %d", 1.0L, 99);
+    ASSERT (result != NULL);
+    ASSERT (result[0] == '1');
+    ASSERT (result[1] == '.');
+    for (size_t i = 0; i < 5119; i++)
+      ASSERT (result[2 + i] == '0');
+    ASSERT (wcscmp (result + 2 + 5119, L" 99") == 0);
+    ASSERT (length == wcslen (result));
+    free (result);
+  }
+
   {
     char input[5000];
     size_t length;
diff --git a/tests/test-vasprintf-posix.c b/tests/test-vasprintf-posix.c
index 6d62468cce..d38541ffb4 100644
--- a/tests/test-vasprintf-posix.c
+++ b/tests/test-vasprintf-posix.c
@@ -3793,6 +3793,20 @@ test_function (int (*my_asprintf) (char **, const char *, ...))
     free (result);
   }
 
+  {
+    char *result;
+    int retval =
+      my_asprintf (&result, "%.5119Lf %d", 1.0L, 99);
+    ASSERT (result != NULL);
+    ASSERT (result[0] == '1');
+    ASSERT (result[1] == '.');
+    for (size_t i = 0; i < 5119; i++)
+      ASSERT (result[2 + i] == '0');
+    ASSERT (streq (result + 2 + 5119, " 99"));
+    ASSERT (retval == strlen (result));
+    free (result);
+  }
+
   {
     char input[5000];
     char *result;
-- 
2.53.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.