public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug fortran/96381] New: gfc_find_vtab can use a character type typespec as a derived type (causing invalid access)
@ 2020-07-29 16:56 matmal01 at gcc dot gnu.org
  2020-07-30  7:43 ` [Bug fortran/96381] " marxin at gcc dot gnu.org
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: matmal01 at gcc dot gnu.org @ 2020-07-29 16:56 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96381

            Bug ID: 96381
           Summary: gfc_find_vtab can use a character type typespec as a
                    derived type (causing invalid access)
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: matmal01 at gcc dot gnu.org
  Target Milestone: ---

When running the testsuite with a compiler sanitized with -fsanitize=hwaddress
(HWASAN sanitizer which is not yet committed upstream) I saw the error below.

The error comes from the testsuite running `pr93337.f90`.

It is complaining that `gfc_find_derived_vtab` is attempting to access an 8
byte chunk of data 88 bytes after a region that is only 48 bytes long.
That seems to be coming from the access of `derived->attr.pdt_template` (which
is a one-bit field in the byte 92 bytes into a `gfc_symbol` structure).

According to the dump the 48 byte long structure is allocated in
`gfc_new_charlen`.
This function only ever sets the `cl` alternative of the union in a
`gfc_typespec`.
I've inlined a GDB session demonstrating the mis-use under the HWASAN dump.





==25394==ERROR: HWAddressSanitizer: tag-mismatch on address 0xefdfffff79d8 at
pc 0x0000006a8560
READ of size 8 at 0xefdfffff79d8 tags: 58/ff (ptr/mem) in thread T0
    #0 0x6a855c in SigTrap<3>
../../../../gcc-source/libsanitizer/hwasan/hwasan_checks.h:27
    #1 0x6a855c in CheckAddress<(__hwasan::ErrorAction)0,
(__hwasan::AccessType)0, 3>
../../../../gcc-source/libsanitizer/hwasan/hwasan_checks.h:88
    #2 0x6a855c in __hwasan_load8
../../../../gcc-source/libsanitizer/hwasan/hwasan.cpp:454
    #3 0x6ff654 in gfc_find_derived_vtab(gfc_symbol*)
../../gcc-source/gcc/fortran/class.c:2269
    #4 0x707498 in gfc_find_vtab(gfc_typespec*)
../../gcc-source/gcc/fortran/class.c:2908
    #5 0x707498 in gfc_find_vtab(gfc_typespec*)
../../gcc-source/gcc/fortran/class.c:2898
    #6 0x7a7578 in gfc_match_assignment()
../../gcc-source/gcc/fortran/match.c:1393
    #7 0x80d53c in match_word ../../gcc-source/gcc/fortran/parse.c:65
    #8 0x80d53c in decode_statement ../../gcc-source/gcc/fortran/parse.c:361
    #9 0x812f28 in next_free ../../gcc-source/gcc/fortran/parse.c:1280
    #10 0x812f28 in next_statement ../../gcc-source/gcc/fortran/parse.c:1512
    #11 0x816190 in parse_spec ../../gcc-source/gcc/fortran/parse.c:3923
    #12 0x819948 in parse_progunit ../../gcc-source/gcc/fortran/parse.c:5853
    #13 0x81c02c in gfc_parse_file() ../../gcc-source/gcc/fortran/parse.c:6394
    #14 0x898d98 in gfc_be_parse_file
../../gcc-source/gcc/fortran/f95-lang.c:212
    #15 0x152ac7c in compile_file ../../gcc-source/gcc/toplev.c:458
    #16 0x69d114 in do_compile ../../gcc-source/gcc/toplev.c:2320
    #17 0x69d114 in toplev::main(int, char**)
../../gcc-source/gcc/toplev.c:2459
    #18 0x6a0218 in main ../../gcc-source/gcc/main.c:39
    #19 0xffffa03c38dc in __libc_start_main
(/lib/aarch64-linux-gnu/libc.so.6+0x1f8dc)

[0xefdfffff79c0,0xefdfffff7a00) is a small allocated heap chunk; size: 64
offset: 24
0xefdfffff79d8 is located 40 bytes to the right of 48-byte region
[0xefdfffff7980,0xefdfffff79b0)
allocated here:
    #0 0x6a9d40 in __sanitizer_calloc
../../../../gcc-source/libsanitizer/hwasan/hwasan_interceptors.cpp:138
    #1 0x2d1ebbc in xcalloc ../../gcc-source/libiberty/xmalloc.c:162
    #2 0x8831a0 in gfc_new_charlen(gfc_namespace*, gfc_charlen*)
../../gcc-source/gcc/fortran/symbol.c:3964
    #3 0x7146ec in gfc_match_char_spec(gfc_typespec*)
../../gcc-source/gcc/fortran/decl.c:3478
    #4 0x71e324 in gfc_match_decl_type_spec(gfc_typespec*, int)
../../gcc-source/gcc/fortran/decl.c:4169
    #5 0x7220d8 in gfc_match_data_decl()
../../gcc-source/gcc/fortran/decl.c:6129
    #6 0x80d6b0 in match_word ../../gcc-source/gcc/fortran/parse.c:65
    #7 0x80d6b0 in decode_statement ../../gcc-source/gcc/fortran/parse.c:376
    #8 0x812f28 in next_free ../../gcc-source/gcc/fortran/parse.c:1280
    #9 0x812f28 in next_statement ../../gcc-source/gcc/fortran/parse.c:1512
    #10 0x816600 in parse_derived ../../gcc-source/gcc/fortran/parse.c:3343
    #11 0x816600 in parse_spec ../../gcc-source/gcc/fortran/parse.c:3884
    #12 0x819948 in parse_progunit ../../gcc-source/gcc/fortran/parse.c:5853
    #13 0x81c02c in gfc_parse_file() ../../gcc-source/gcc/fortran/parse.c:6394
    #14 0x898d98 in gfc_be_parse_file
../../gcc-source/gcc/fortran/f95-lang.c:212
    #15 0x152ac7c in compile_file ../../gcc-source/gcc/toplev.c:458
    #16 0x69d114 in do_compile ../../gcc-source/gcc/toplev.c:2320
    #17 0x69d114 in toplev::main(int, char**)
../../gcc-source/gcc/toplev.c:2459
    #18 0x6a0218 in main ../../gcc-source/gcc/main.c:39
    #19 0xffffa03c38dc in __libc_start_main
(/lib/aarch64-linux-gnu/libc.so.6+0x1f8dc)
    #20 0x6a3e5c 
(/home/ubuntu/working-directory/gcc-hwasan-install/libexec/gcc/aarch64-unknown-linux-gnu/11.0.0/f951+0x6a3e5c)

Thread: T0 0xeffe00002000 stack: [0xfffffabad000,0xfffffebad000) sz: 67108864
tls: [0xffffa060b000,0xffffa060b850)
Memory tags around the buggy address (one tag corresponds to 16 bytes):
  0xfefcfffff710: b5  b5  b5  08  1a  1a  1a  1a  47  47  47  08  2b  2b  2b 
08
  0xfefcfffff720: 79  79  79  08  ad  ad  ad  ad  77  77  77  08  42  42  42 
08
  0xfefcfffff730: 70  70  70  70  93  93  93  08  36  36  36  36  19  19  19 
08
  0xfefcfffff740: 6e  6e  6e  6e  c2  c2  c2  08  29  29  29  08  9f  9f  9f 
9f
  0xfefcfffff750: ce  ce  ce  08  3c  3c  3c  ed  d1  d1  d1  08  2a  2a  2a 
08
  0xfefcfffff760: bb  bb  bb  bb  e9  e9  e9  08  2c  2c  2c  08  b4  b4  b4 
b4
  0xfefcfffff770: 33  33  33  08  0d  0d  0d  08  ec  ec  ec  ec  29  29  29 
08
  0xfefcfffff780: bf  bf  bf  08  f9  f9  f9  f9  f0  f0  f0  08  01  01  01 
08
=>0xfefcfffff790: fc  fc  fc  fc  f0  f0  f0  08  58  58  58  81  ff [ff] ff 
08
  0xfefcfffff7a0: a8  a8  a8  08  83  83  83  83  f3  f3  f3  08  9e  9e  9e 
08
  0xfefcfffff7b0: bf  bf  bf  08  7f  7f  7f  7f  cc  cc  04  9e  43  43  43 
43
  0xfefcfffff7c0: c4  c4  c4  c4  12  12  12  b5  36  36  36  36  2d  2d  2d 
2d
  0xfefcfffff7d0: 65  65  65  65  cc  cc  cc  cc  4c  4c  4c  4c  78  78  78 
0e
  0xfefcfffff7e0: d1  d1  d1  d1  f5  f5  f5  f5  57  57  57  08  b0  b0  b0 
08
  0xfefcfffff7f0: 5e  5e  5e  08  49  49  49  08  7c  7c  7c  08  85  85  85 
08
  0xfefcfffff800: 63  63  63  08  7d  7d  7d  08  0d  0d  0d  08  71  71  71 
08
  0xfefcfffff810: 06  06  08  97  74  74  74  08  bb  bb  bb  08  aa  aa  aa 
08
Tags for short granules around the buggy address (one tag corresponds to 16
bytes):
  0xfefcfffff780: ..  ..  ..  bf  ..  ..  ..  ..  ..  ..  ..  f0  f0  00  00 
01
=>0xfefcfffff790: ..  ..  ..  ..  ..  ..  ..  f0  ..  ..  ..  ..  .. [..] .. 
ff
  0xfefcfffff7a0: ..  ..  ..  a8  ..  ..  ..  ..  ..  ..  ..  f3  ..  ..  .. 
9e
See
https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html#short-granules
for a description of short granule tags
SUMMARY: HWAddressSanitizer: tag-mismatch
../../../../gcc-source/libsanitizer/hwasan/hwasan_checks.h:27 in SigTrap<3>







GDB session demonstrating this happening (to demonstrate that this does seem to
be misusing a `gfc_charlen*` as a `gfc_symbol *`).


ubuntu@ubuntu:~/working-directory$ ./gcc-hwasan-install/bin/gfortran
gcc-source/gcc/testsuite/gfortran.dg/pr93337.f90 -O -pedantic-errors -S -o -
-wrapper gdb,-q,--args
Reading symbols from
/home/ubuntu/working-directory/gcc-hwasan-install/libexec/gcc/aarch64-unknown-linux-gnu/11.0.0/f951...done.
(gdb) break decl.c:3516 if $_any_caller_is("gfc_match_decl_type_spec")
Breakpoint 1 at 0x714814: file ../../gcc-source/gcc/fortran/decl.c, line 3516.
(gdb) run
Starting program:
/home/ubuntu/working-directory/gcc-hwasan-install/libexec/gcc/aarch64-unknown-linux-gnu/11.0.0/f951
gcc-source/gcc/testsuite/gfortran.dg/pr93337.f90 -quiet -dumpbase pr93337.f90
-dumpbase-ext .f90 -mlittle-endian -mabi=lp64 -O -pedantic-errors -o -
-fintrinsic-modules-path
/home/ubuntu/working-directory/gcc-hwasan-install/lib/gcc/aarch64-unknown-linux-gnu/11.0.0/finclude
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/aarch64-linux-gnu/libthread_db.so.1".
        .arch armv8-a
        .file   "pr93337.f90"

Breakpoint 1, gfc_match_char_spec (ts=ts@entry=0x4028c58 <current_ts>) at
../../gcc-source/gcc/fortran/decl.c:3516
3516      ts->u.cl = cl;
(gdb) print cl
$1 = (gfc_charlen *) 0x3100efdfffff3440
(gdb) break gfc_find_derived_vtab if (void*)derived == (void*)$1
Breakpoint 2 at 0x6ff370: file ../../gcc-source/gcc/fortran/class.c, line 2262.
(gdb) cont
Continuing.

Breakpoint 2, gfc_find_derived_vtab (derived=derived@entry=0x3100efdfffff3440)
at ../../gcc-source/gcc/fortran/class.c:2262
2262    {
(gdb)

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug fortran/96381] gfc_find_vtab can use a character type typespec as a derived type (causing invalid access)
  2020-07-29 16:56 [Bug fortran/96381] New: gfc_find_vtab can use a character type typespec as a derived type (causing invalid access) matmal01 at gcc dot gnu.org
@ 2020-07-30  7:43 ` marxin at gcc dot gnu.org
  2020-12-31 21:09 ` anlauf at gcc dot gnu.org
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: marxin at gcc dot gnu.org @ 2020-07-30  7:43 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96381

Martin Liška <marxin at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2020-07-30
     Ever confirmed|0                           |1
                 CC|                            |anlauf at gcc dot gnu.org,
                   |                            |marxin at gcc dot gnu.org
             Status|UNCONFIRMED                 |NEW

--- Comment #1 from Martin Liška <marxin at gcc dot gnu.org> ---
Confirmed, one can see it in valgrind as well:

==1018== Invalid read of size 1
==1018==    at 0x7F10BB: gfc_find_derived_vtab(gfc_symbol*) (class.c:2269)
==1018==    by 0x8484F3: gfc_match_assignment() (match.c:1393)
==1018==    by 0x86F742: match_word (parse.c:65)
==1018==    by 0x86F742: decode_statement() (parse.c:361)
==1018==    by 0x874C14: next_free (parse.c:1315)
==1018==    by 0x874C14: next_statement() (parse.c:1547)
==1018==    by 0x87675C: parse_spec(gfc_statement) (parse.c:3962)
==1018==    by 0x87949C: parse_progunit(gfc_statement) (parse.c:5892)
==1018==    by 0x87AB80: gfc_parse_file() (parse.c:6433)
==1018==    by 0x8CC54F: gfc_be_parse_file() (f95-lang.c:212)
==1018==    by 0xE4C123: compile_file() (toplev.c:458)
==1018==    by 0x7D2D91: do_compile (toplev.c:2327)
==1018==    by 0x7D2D91: toplev::main(int, char**) (toplev.c:2466)
==1018==    by 0x7D6B5E: main (main.c:39)
==1018==  Address 0x51264ae is 18 bytes before a block of size 264 free'd
==1018==    at 0x48399AB: free (in
/usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==1018==    by 0x7DE7EF: gfc_match_array_spec(gfc_array_spec**, bool, bool)
(array.c:802)
==1018==    by 0x803396: variable_decl (decl.c:2520)
==1018==    by 0x803396: gfc_match_data_decl() (decl.c:6200)
==1018==    by 0x86F88D: match_word (parse.c:65)
==1018==    by 0x86F88D: decode_statement() (parse.c:376)
==1018==    by 0x874C14: next_free (parse.c:1315)
==1018==    by 0x874C14: next_statement() (parse.c:1547)
==1018==    by 0x876CC4: parse_derived (parse.c:3382)
==1018==    by 0x876CC4: parse_spec(gfc_statement) (parse.c:3923)
==1018==    by 0x87949C: parse_progunit(gfc_statement) (parse.c:5892)
==1018==    by 0x87AB80: gfc_parse_file() (parse.c:6433)
==1018==    by 0x8CC54F: gfc_be_parse_file() (f95-lang.c:212)
==1018==    by 0xE4C123: compile_file() (toplev.c:458)
==1018==    by 0x7D2D91: do_compile (toplev.c:2327)
==1018==    by 0x7D2D91: toplev::main(int, char**) (toplev.c:2466)
==1018==    by 0x7D6B5E: main (main.c:39)

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug fortran/96381] gfc_find_vtab can use a character type typespec as a derived type (causing invalid access)
  2020-07-29 16:56 [Bug fortran/96381] New: gfc_find_vtab can use a character type typespec as a derived type (causing invalid access) matmal01 at gcc dot gnu.org
  2020-07-30  7:43 ` [Bug fortran/96381] " marxin at gcc dot gnu.org
@ 2020-12-31 21:09 ` anlauf at gcc dot gnu.org
  2021-01-01 16:15 ` anlauf at gcc dot gnu.org
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: anlauf at gcc dot gnu.org @ 2020-12-31 21:09 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96381

--- Comment #2 from anlauf at gcc dot gnu.org ---
The following patch fixes the invalid read:

diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c
index 5677d920239..783e4c7354b 100644
--- a/gcc/fortran/class.c
+++ b/gcc/fortran/class.c
@@ -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;

Not regtested yet.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug fortran/96381] gfc_find_vtab can use a character type typespec as a derived type (causing invalid access)
  2020-07-29 16:56 [Bug fortran/96381] New: gfc_find_vtab can use a character type typespec as a derived type (causing invalid access) matmal01 at gcc dot gnu.org
  2020-07-30  7:43 ` [Bug fortran/96381] " marxin at gcc dot gnu.org
  2020-12-31 21:09 ` anlauf at gcc dot gnu.org
@ 2021-01-01 16:15 ` anlauf at gcc dot gnu.org
  2021-01-01 17:56 ` cvs-commit at gcc dot gnu.org
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: anlauf at gcc dot gnu.org @ 2021-01-01 16:15 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96381

anlauf at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|unassigned at gcc dot gnu.org      |anlauf at gcc dot gnu.org
             Status|NEW                         |ASSIGNED

--- Comment #3 from anlauf at gcc dot gnu.org ---
Patch: https://gcc.gnu.org/pipermail/fortran/2021-January/055509.html

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug fortran/96381] gfc_find_vtab can use a character type typespec as a derived type (causing invalid access)
  2020-07-29 16:56 [Bug fortran/96381] New: gfc_find_vtab can use a character type typespec as a derived type (causing invalid access) matmal01 at gcc dot gnu.org
                   ` (2 preceding siblings ...)
  2021-01-01 16:15 ` anlauf at gcc dot gnu.org
@ 2021-01-01 17:56 ` cvs-commit at gcc dot gnu.org
  2021-01-01 20:10 ` anlauf at gcc dot gnu.org
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2021-01-01 17:56 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96381

--- Comment #4 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Harald Anlauf <anlauf@gcc.gnu.org>:

https://gcc.gnu.org/g:d816b0c144d15e6570eb5b124b9f3ccbe3d40082

commit r11-6405-gd816b0c144d15e6570eb5b124b9f3ccbe3d40082
Author: Harald Anlauf <anlauf@gmx.de>
Date:   Fri Jan 1 18:55:41 2021 +0100

    PR fortran/96381 - invalid read in gfc_find_derived_vtab

    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.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug fortran/96381] gfc_find_vtab can use a character type typespec as a derived type (causing invalid access)
  2020-07-29 16:56 [Bug fortran/96381] New: gfc_find_vtab can use a character type typespec as a derived type (causing invalid access) matmal01 at gcc dot gnu.org
                   ` (3 preceding siblings ...)
  2021-01-01 17:56 ` cvs-commit at gcc dot gnu.org
@ 2021-01-01 20:10 ` anlauf at gcc dot gnu.org
  2021-01-04 21:03 ` cvs-commit at gcc dot gnu.org
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: anlauf at gcc dot gnu.org @ 2021-01-01 20:10 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96381

anlauf at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |dcb314 at hotmail dot com

--- Comment #5 from anlauf at gcc dot gnu.org ---
*** Bug 98263 has been marked as a duplicate of this bug. ***

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug fortran/96381] gfc_find_vtab can use a character type typespec as a derived type (causing invalid access)
  2020-07-29 16:56 [Bug fortran/96381] New: gfc_find_vtab can use a character type typespec as a derived type (causing invalid access) matmal01 at gcc dot gnu.org
                   ` (4 preceding siblings ...)
  2021-01-01 20:10 ` anlauf at gcc dot gnu.org
@ 2021-01-04 21:03 ` cvs-commit at gcc dot gnu.org
  2021-01-04 21:06 ` cvs-commit at gcc dot gnu.org
  2021-01-04 21:09 ` anlauf at gcc dot gnu.org
  7 siblings, 0 replies; 9+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2021-01-04 21:03 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96381

--- Comment #6 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-10 branch has been updated by Harald Anlauf
<anlauf@gcc.gnu.org>:

https://gcc.gnu.org/g:78ff090d0a0bb5a77560203b3b49bb7da7fcb88c

commit r10-9200-g78ff090d0a0bb5a77560203b3b49bb7da7fcb88c
Author: Harald Anlauf <anlauf@gmx.de>
Date:   Fri Jan 1 18:55:41 2021 +0100

    PR fortran/96381 - invalid read in gfc_find_derived_vtab

    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.

    (cherry picked from commit d816b0c144d15e6570eb5b124b9f3ccbe3d40082)

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug fortran/96381] gfc_find_vtab can use a character type typespec as a derived type (causing invalid access)
  2020-07-29 16:56 [Bug fortran/96381] New: gfc_find_vtab can use a character type typespec as a derived type (causing invalid access) matmal01 at gcc dot gnu.org
                   ` (5 preceding siblings ...)
  2021-01-04 21:03 ` cvs-commit at gcc dot gnu.org
@ 2021-01-04 21:06 ` cvs-commit at gcc dot gnu.org
  2021-01-04 21:09 ` anlauf at gcc dot gnu.org
  7 siblings, 0 replies; 9+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2021-01-04 21:06 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96381

--- Comment #7 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-9 branch has been updated by Harald Anlauf
<anlauf@gcc.gnu.org>:

https://gcc.gnu.org/g:2bfcf6011a6cdce0439e3d1b94bcb5fcf078f4c2

commit r9-9151-g2bfcf6011a6cdce0439e3d1b94bcb5fcf078f4c2
Author: Harald Anlauf <anlauf@gmx.de>
Date:   Fri Jan 1 18:55:41 2021 +0100

    PR fortran/96381 - invalid read in gfc_find_derived_vtab

    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.

    (cherry picked from commit d816b0c144d15e6570eb5b124b9f3ccbe3d40082)

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug fortran/96381] gfc_find_vtab can use a character type typespec as a derived type (causing invalid access)
  2020-07-29 16:56 [Bug fortran/96381] New: gfc_find_vtab can use a character type typespec as a derived type (causing invalid access) matmal01 at gcc dot gnu.org
                   ` (6 preceding siblings ...)
  2021-01-04 21:06 ` cvs-commit at gcc dot gnu.org
@ 2021-01-04 21:09 ` anlauf at gcc dot gnu.org
  7 siblings, 0 replies; 9+ messages in thread
From: anlauf at gcc dot gnu.org @ 2021-01-04 21:09 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96381

anlauf at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|---                         |FIXED

--- Comment #8 from anlauf at gcc dot gnu.org ---
Fixed on all branches where testcase gfortran.dg/pr93337.f90 was committed.

Thanks for the report!

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2021-01-04 21:09 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-29 16:56 [Bug fortran/96381] New: gfc_find_vtab can use a character type typespec as a derived type (causing invalid access) matmal01 at gcc dot gnu.org
2020-07-30  7:43 ` [Bug fortran/96381] " marxin at gcc dot gnu.org
2020-12-31 21:09 ` anlauf at gcc dot gnu.org
2021-01-01 16:15 ` anlauf at gcc dot gnu.org
2021-01-01 17:56 ` cvs-commit at gcc dot gnu.org
2021-01-01 20:10 ` anlauf at gcc dot gnu.org
2021-01-04 21:03 ` cvs-commit at gcc dot gnu.org
2021-01-04 21:06 ` cvs-commit at gcc dot gnu.org
2021-01-04 21:09 ` anlauf at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).