]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR fortran/96381 - invalid read in gfc_find_derived_vtab
authorHarald Anlauf <anlauf@gmx.de>
Fri, 1 Jan 2021 17:55:41 +0000 (18:55 +0100)
committerHarald Anlauf <anlauf@gmx.de>
Fri, 1 Jan 2021 17:55:41 +0000 (18:55 +0100)
An invalid declaration of a CLASS instance can lead to an internal state
with inconsistent attributes during parsing that needs to be handled with
sufficient care when processing subsequent statements.  Avoid a lookup of
the vtab entry for such cases.

gcc/fortran/ChangeLog:

* class.c (gfc_find_vtab): Add check on attribute is_class.

gcc/fortran/class.c

index 5677d920239f97a1f988faceb22ef6e590b36d6b..783e4c7354be092dc31c3d882cdb3fc79f463cdf 100644 (file)
@@ -2906,7 +2906,9 @@ gfc_find_vtab (gfc_typespec *ts)
     case BT_DERIVED:
       return gfc_find_derived_vtab (ts->u.derived);
     case BT_CLASS:
-      if (ts->u.derived->components && ts->u.derived->components->ts.u.derived)
+      if (ts->u.derived->attr.is_class
+         && ts->u.derived->components
+         && ts->u.derived->components->ts.u.derived)
        return gfc_find_derived_vtab (ts->u.derived->components->ts.u.derived);
       else
        return NULL;