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:
parent
b9ad851eef
commit
6ddb1bc19f
|
@ -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.
|
||||
|
|
10
gcc/real.c
10
gcc/real.c
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue