From a210f14b5f977c6d7b6339810031b63f112f6cf4 Mon Sep 17 00:00:00 2001 From: grahams Date: Sun, 17 Nov 2002 20:20:39 +0000 Subject: [PATCH] * 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/ChangeLog | 5 +++++ gcc/real.c | 10 +++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bc2c88b..6434f60 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-11-17 Graham Stott + + * real.c (real_to_decimal): Fix buffer overrun when buffer size + is smaller than representation. + 2002-11-17 Kazu Hirata * builtins.c: Fix formatting. diff --git a/gcc/real.c b/gcc/real.c index 3bf4637..d9a4b80 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); -- 2.7.4