From: Jerry DeLisle Date: Thu, 21 Feb 2008 02:20:27 +0000 (+0000) Subject: re PR fortran/35036 (illegal E format descriptor produces wrong output) X-Git-Tag: releases/gcc-4.4.0~6384 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=50a932e0cb654d9c1212a482bfc401d64b716df3;p=thirdparty%2Fgcc.git re PR fortran/35036 (illegal E format descriptor produces wrong output) 2008-02-20 Jerry DeLisle PR libfortran/35036 * write_float.def (output_float): Add error checks for zero digits after decimal point in E and D format specifiers. From-SVN: r132510 --- diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 6260ed30b441..dcc52a5c1e90 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,9 @@ +2008-02-20 Jerry DeLisle + + PR libfortran/35036 + * write_float.def (output_float): Add error checks for zero digits + after decimal point in E and D format specifiers. + 2008-02-10 Jerry DeLisle PR libfortran/35063 diff --git a/libgfortran/io/write_float.def b/libgfortran/io/write_float.def index 4642013ae984..028fd27b863b 100644 --- a/libgfortran/io/write_float.def +++ b/libgfortran/io/write_float.def @@ -167,6 +167,19 @@ output_float (st_parameter_dt *dtp, const fnode *f, char *buffer, size_t size, case FMT_E: case FMT_D: i = dtp->u.p.scale_factor; + if (d <= 0 && i == 0) + { + generate_error (&dtp->common, LIBERROR_FORMAT, "Precision not " + "greater than zero in format specifier 'E' or 'D'"); + return; + } + if (i <= -d || i >= d + 2) + { + generate_error (&dtp->common, LIBERROR_FORMAT, "Scale factor " + "out of range in format specifier 'E' or 'D'"); + return; + } + if (!zero_flag) e -= i; if (i < 0)