bio_printf: add \0 terminators for error returns in floating point conversions.
authorPauli <pauli@openssl.org>
Mon, 12 Apr 2021 21:47:31 +0000 (07:47 +1000)
committerPauli <pauli@openssl.org>
Wed, 14 Apr 2021 07:00:04 +0000 (17:00 +1000)
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/14829)

crypto/bio/b_print.c

index ba2c6c5b1fd12ef589d303455ea7a2f5893d1b4b..2f012f42f229aaa6a87cb9cb105d668f66ea2aef 100644 (file)
@@ -620,6 +620,7 @@ fmtfp(char **sbuffer,
                     /*
                      * Should not happen. If we're in F_FORMAT then exp < max?
                      */
+                    (void)doapr_outch(sbuffer, buffer, currlen, maxlen, '\0');
                     return 0;
                 }
             } else {
@@ -641,6 +642,7 @@ fmtfp(char **sbuffer,
      */
     if (ufvalue >= (double)(ULONG_MAX - 65535) + 65536.0) {
         /* Number too big */
+        (void)doapr_outch(sbuffer, buffer, currlen, maxlen, '\0');
         return 0;
     }
     intpart = (unsigned long)ufvalue;
@@ -704,8 +706,10 @@ fmtfp(char **sbuffer,
             tmpexp = (tmpexp / 10);
         } while (tmpexp > 0 && eplace < (int)sizeof(econvert));
         /* Exponent is huge!! Too big to print */
-        if (tmpexp > 0)
+        if (tmpexp > 0) {
+            (void)doapr_outch(sbuffer, buffer, currlen, maxlen, '\0');
             return 0;
+        }
         /* Add a leading 0 for single digit exponents */
         if (eplace == 1)
             econvert[eplace++] = '0';