]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/85520 (Out of memory when declaring a character with len << 0)
authorSteven G. Kargl <kargl@gcc.gnu.org>
Wed, 25 Apr 2018 00:12:58 +0000 (00:12 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Wed, 25 Apr 2018 00:12:58 +0000 (00:12 +0000)
2018-04-24  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/85520
* decl.c (gfc_match_char_spec): Check for negative length and set to 0.

2018-04-24  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/85520
* gfortran.dg/pr85520.f90: New test.

From-SVN: r259625

gcc/fortran/ChangeLog
gcc/fortran/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr85520.f90 [new file with mode: 0644]

index d0554695aea0dcfda10cb1dd5949a3efe3090fa5..e7c919c9f2fc6f51faaefec32ed43e33a6216bd3 100644 (file)
@@ -1,3 +1,8 @@
+2018-04-24  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/85520
+       * decl.c (gfc_match_char_spec): Check for negative length and set to 0.
+
 2018-03-28  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/85084
index 4000a0c76b6d7e74e56fe7ef9de81e429574da6b..917b89f0a482b1ab5aae3bcc6f702afaf9da4fa3 100644 (file)
@@ -3023,7 +3023,11 @@ done:
          e = gfc_copy_expr (len);
          gfc_reduce_init_expr (e);
          if (e->expr_type == EXPR_CONSTANT)
-           gfc_replace_expr (len, e);
+           {
+             gfc_replace_expr (len, e);
+             if (mpz_cmp_si (len->value.integer, 0) < 0)
+               mpz_set_ui (len->value.integer, 0);
+           }
          else
            gfc_free_expr (e);
          cl->length = len;
index 2f36f83abf9321cf716f97d5bab334fc0b6eab3e..84ea927b23188c0937708ab2667e3922c49e47ad 100644 (file)
@@ -1,3 +1,8 @@
+2018-04-24  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/85520
+       * gfortran.dg/pr85520.f90: New test.
+
 2018-04-23  Aaron Sawdey  <acsawdey@linux.ibm.com>
 
        Backport from mainline
diff --git a/gcc/testsuite/gfortran.dg/pr85520.f90 b/gcc/testsuite/gfortran.dg/pr85520.f90
new file mode 100644 (file)
index 0000000..3e66a90
--- /dev/null
@@ -0,0 +1,7 @@
+! { dg-do run }
+! PR fortran/85520
+! Original code from Gerhard Steinmetz <gscfq at t-online dot de>
+program p
+   character(-huge(1)) :: c = ' '
+    if (len(c) /= 0) stop 1
+end