]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Fix also BIO_printf formatting for INF and NAN
authorBernd Edlinger <bernd.edlinger@hotmail.de>
Thu, 24 Apr 2025 19:09:40 +0000 (21:09 +0200)
committerTomas Mraz <tomas@openssl.org>
Mon, 28 Apr 2025 15:28:15 +0000 (17:28 +0200)
Avoid infinite loooooooops in %e and %g formatting for +/-INF and
make the invalid value at least visible by using '?' as signvalue.

Fixes #26973

Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/27491)

(cherry picked from commit b56dd5bfec8e790cc2d5b1bdca6ecd350a3b7779)

crypto/bio/bio_print.c

index c86f8fe15e9a27d57d47b6b8b0d1920a48dc56aa..887f3e194121b24f7fc42f562182728f0b630b7e 100644 (file)
@@ -535,6 +535,10 @@ static LDOUBLE abs_val(LDOUBLE value)
     LDOUBLE result = value;
     if (value < 0)
         result = -value;
+    if (result > 0 && result / 2 == result) /* INF */
+        result = 0;
+    else if (result != result) /* NAN */
+        result = 0;
     return result;
 }
 
@@ -591,6 +595,8 @@ fmtfp(char **sbuffer,
     else if (flags & DP_F_SPACE)
         signvalue = ' ';
     ufvalue = abs_val(fvalue);
+    if (ufvalue == 0 && fvalue != 0) /* INF or NAN? */
+        signvalue = '?';
 
     /*
      * G_FORMAT sometimes prints like E_FORMAT and sometimes like F_FORMAT