]> Savannah Git Hosting - gnulib.git/commitdiff
strtold: Work around major mingw bugs.
authorBruno Haible <bruno@clisp.org>
Sun, 14 Jul 2024 16:38:16 +0000 (18:38 +0200)
committerBruno Haible <bruno@clisp.org>
Sun, 21 Jul 2024 01:14:40 +0000 (03:14 +0200)
* lib/strtod.c (HAVE_UNDERLYING_STRTOD) [USE_LONG_DOUBLE]: Set to 0 on
mingw versions before 10.0.
* doc/posix-functions/strtold.texi: Mention the mingw bugs.

ChangeLog
doc/posix-functions/strtold.texi
lib/strtod.c

index c7af30b4c2849068108852f1d5c7f095baa7e82e..9cd8f14566baf4a6608fb8a4eb4470adbafa06cf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2024-07-14  Bruno Haible  <bruno@clisp.org>
+
+       strtold: Work around major mingw bugs.
+       * lib/strtod.c (HAVE_UNDERLYING_STRTOD) [USE_LONG_DOUBLE]: Set to 0 on
+       mingw versions before 10.0.
+       * doc/posix-functions/strtold.texi: Mention the mingw bugs.
+
 2024-07-13  Bruno Haible  <bruno@clisp.org>
 
        stdlib: Support use of clang++ on Ubuntu.
index 3fc1136ecb0d3259153d54a6e4bda2647e3b39cc..5dbe158464fa303b6975741f5ce190052aec27b5 100644 (file)
@@ -53,6 +53,10 @@ HP-UX 11.31/ia64.
 This function fails to set @code{errno} upon underflow on some platforms:
 @c https://cygwin.com/ml/cygwin/2019-12/msg00072.html
 Cygwin 2.9.
+
+@item
+This function leaks memory on mingw 5.0
+and allocates an unbounded amount of stack on mingw 9.0.
 @end itemize
 
 Portability problems not fixed by Gnulib:
index a545be09a44ed7b0d41953e738d99b59c845e68a..e218a46f7163a65a92133c8abc9be748f69646dc 100644 (file)
 # elif STRTOLD_HAS_UNDERFLOW_BUG
    /* strtold would not set errno=ERANGE upon underflow.  */
 #  define HAVE_UNDERLYING_STRTOD 0
+# elif defined __MINGW32__ && __MINGW64_VERSION_MAJOR < 10
+   /* strtold is broken in mingw versions before 10.0:
+      - Up to mingw 5.0.x, it leaks memory at every invocation.
+      - Up to mingw 9.0.x, it allocates an unbounded amount of stack.
+      See <https://github.com/mingw-w64/mingw-w64/commit/450309b97b2e839ea02887dfaf0f1d10fb5d40cc>
+      and <https://github.com/mingw-w64/mingw-w64/commit/73806c0709b7e6c0f6587f11a955743670e85470>.  */
+#  define HAVE_UNDERLYING_STRTOD 0
 # else
 #  define HAVE_UNDERLYING_STRTOD HAVE_STRTOLD
 # endif