From b0c068160f502c9d37ec02c8a514546937544eb8 Mon Sep 17 00:00:00 2001 From: Francois-Xavier Coudert Date: Sat, 16 May 2009 16:53:02 +0000 Subject: re PR fortran/31243 (Detect strings longer than 2**32 characters) PR fortran/31243 * resolve.c (resolve_substring): Don't allow too large substring indexes. (gfc_resolve_substring_charlen): Fix typo. (gfc_resolve_character_operator): Fix typo. (resolve_charlen): Catch unreasonably large string lengths. * simplify.c (gfc_simplify_len): Don't error out on LEN range checks. * gcc/testsuite/gfortran.dg/string_1.f90: New test. * gcc/testsuite/gfortran.dg/string_2.f90: New test. * gcc/testsuite/gfortran.dg/string_3.f90: New test. From-SVN: r147619 --- gcc/fortran/simplify.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'gcc/fortran/simplify.c') diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c index 7be4671..68ebb56 100644 --- a/gcc/fortran/simplify.c +++ b/gcc/fortran/simplify.c @@ -2433,7 +2433,13 @@ gfc_simplify_len (gfc_expr *e, gfc_expr *kind) { result = gfc_constant_result (BT_INTEGER, k, &e->where); mpz_set_si (result->value.integer, e->value.character.length); - return range_check (result, "LEN"); + if (gfc_range_check (result) == ARITH_OK) + return result; + else + { + gfc_free_expr (result); + return NULL; + } } if (e->ts.cl != NULL && e->ts.cl->length != NULL @@ -2442,7 +2448,13 @@ gfc_simplify_len (gfc_expr *e, gfc_expr *kind) { result = gfc_constant_result (BT_INTEGER, k, &e->where); mpz_set (result->value.integer, e->ts.cl->length->value.integer); - return range_check (result, "LEN"); + if (gfc_range_check (result) == ARITH_OK) + return result; + else + { + gfc_free_expr (result); + return NULL; + } } return NULL; -- cgit v1.1