real.c (real_to_decimal): Fix buffer overrun when buffer size is smaller than representation.

* real.c (real_to_decimal): Fix buffer overrun when buffer size
        is smaller than representation.

From-SVN: r59200
This commit is contained in:
Graham Stott 2002-11-17 20:20:39 +00:00 committed by Graham Stott
parent b9ad851eef
commit 6ddb1bc19f
2 changed files with 10 additions and 5 deletions

View File

@ -1,3 +1,8 @@
2002-11-17 Graham Stott <graham.stott@btinternet.com>
* real.c (real_to_decimal): Fix buffer overrun when buffer size
is smaller than representation.
2002-11-17 Kazu Hirata <kazu@cs.umass.edu>
* builtins.c: Fix formatting.

View File

@ -1485,6 +1485,11 @@ real_to_decimal (str, r_orig, buf_size, digits, crop_trailing_zeros)
abort ();
}
/* Bound the number of digits printed by the size of the representation. */
max_digits = SIGNIFICAND_BITS * M_LOG10_2;
if (digits == 0 || digits > max_digits)
digits = max_digits;
/* Estimate the decimal exponent, and compute the length of the string it
will print as. Be conservative and add one to account for possible
overflow or rounding error. */
@ -1499,11 +1504,6 @@ real_to_decimal (str, r_orig, buf_size, digits, crop_trailing_zeros)
if (digits > max_digits)
digits = max_digits;
/* Bound the number of digits printed by the size of the representation. */
max_digits = SIGNIFICAND_BITS * M_LOG10_2;
if (digits == 0 || digits > max_digits)
digits = max_digits;
one = real_digit (1);
ten = ten_to_ptwo (0);