From 6ddb1bc19f3860740acc0ed31e54ab8cfac07dd2 Mon Sep 17 00:00:00 2001 From: Graham Stott 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. * real.c (real_to_decimal): Fix buffer overrun when buffer size is smaller than representation. From-SVN: r59200 --- gcc/ChangeLog | 5 +++++ gcc/real.c | 10 +++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bc2c88b905f..6434f60d1e2 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 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); -- 2.30.2