From a210f14b5f977c6d7b6339810031b63f112f6cf4 Mon Sep 17 00:00:00 2001 From: grahams Date: Sun, 17 Nov 2002 20:20:39 +0000 Subject: * real.c (real_to_decimal): Fix buffer overrun when buffer size is smaller than representation. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@59200 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/real.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'gcc/real.c') diff --git a/gcc/real.c b/gcc/real.c index 3bf46370bbb..d9a4b801e3d 100644 --- a/gcc/real.c +++ b/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); -- cgit v1.2.1