From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) by sourceware.org (Postfix) with ESMTPS id 0B7AA3858D28; Wed, 18 Jan 2023 21:20:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0B7AA3858D28 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmx.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.de; s=s31663417; t=1674076842; bh=/By4IL6+HUcksiRNDL1ntFoQY5FT/5/VJI0zj1Og8hE=; h=X-UI-Sender-Class:From:To:Subject:Date; b=AWqx5MhsZKmnBO1a+LWiY0UGm3UlAYiA9hoLUrCH+10ztE4p+dAVJet1zOt3bXHYj daJeSfENp7sprmcQEYgUp5pWVPOY655cGwwBuTYBL4Y/w94jRpMlcUGHX503E3zCDy QB/zB6hH+BToRF0WhKsDR/tXkzJBCbk8HBe1nuBS8tvu036DcrthDJz1qbLp9Qz/9y gIkPzDzoFsTyPESfPsY4Jkus1aq2YVngIuOlBwWfB7qUfxBDWWdk+3CWyGT/DqEa6s iC1LZNDfmQcsR95FP0OcNC6urx1piW6dpdufnrQJhM9Nv8Te7aKisjHsAftOVS05o/ OIG8D3bP1G2mg== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [93.207.88.90] ([93.207.88.90]) by web-mail.gmx.net (3c-app-gmx-bs46.server.lan [172.19.170.98]) (via HTTP); Wed, 18 Jan 2023 22:20:42 +0100 MIME-Version: 1.0 Message-ID: From: Harald Anlauf To: fortran , gcc-patches Subject: [PATCH] Fortran: error recovery for invalid CLASS component [PR108434] Content-Type: multipart/mixed; boundary=nika-52902f18-42f8-48a1-b28c-bbc715f51f98 Date: Wed, 18 Jan 2023 22:20:42 +0100 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:3yY4qFKpN0gpKHB99Orss90w2U+u3RofiQILMbDov7cPs8BdJkwe4YHnsisHi9OViMb3h ezSEJju/IVV2axfZC9ol3PPUzioP52B4r5O4tpoK8O4cKn/vVOOW98IIoeaz1y4SWMYfXfSflxiL a0ivQi+5B1TUTjh0TPJp4Ktq84eXmxcZp+eR4dS55xQs7xx7kCAJduBJe23sHjQ+TiEBuXbfA38/ j9UORSTcl64gZoa8qOv36B0ODHStEKZUhmGMknos3sGPhDBKxedSO7HQn1saOiB0DH3XHGZ7bSW5 fE= UI-OutboundReport: notjunk:1;M01:P0:0PKZgKPIwb0=;ftvkavdWjh/jCTIJS4teh/Ej0Tp yMIjWRswIapDB1HpxuyBzFIR3cD2rmig60lUhS97wMU8IrWePh/q3/gwScBdZndn/20hs38oy ZlqdblKH9PwjP9fdB1OmaNUhElYfatS77qlJuy2p1OeR4+XkPwyT65JD7IxzMEe9GbSpwxTqm d5JJW8A1hdhRD9AzU9mB9+5/buA6gzKubcnPlbwGjEyvDv7tY0lO1i5U9Eie8IvRBaYzq5vvQ M7XhqQz89MU9ARUIKFTuc2ryLxvXu1R16gACTyamY97ADgrChxlkjGXbaWIHUgesUBLwlpThn 9Gem4O8op3sHOq2OSsVlXcWnggOOj8OGa/diYmr07LhYSPy/+pegC5P4iJO6BPhXfCQClKdVW BJrew41gwJXtavcWFfnR3+ACZQNndNi8thgtpa1mJ3Ie6YZoRTztKkxlhNttQ/KFb6cZ2kA+C Qpha90hsxe1n1zeTyQaBS38RmoID+/+80rFvq44hPNFNP6Iv75xPhlegy6Cp1rTgqIvSZ/dEu U+sbiX3QWTh04gtX+Zmvo7Hn/by588+/vE+MZglMhCti+o+T+vEQC4so8xAKZYhyQP5nzxlkB V2pSQRUvVx2/tTBQ84tM0AzSVspTIDcJ9QKInGykaaBo2xPfynEFlUigMqYuAmFd8JMQCqs5B +msY35hqfK7aiea0cpd3PkyQy+homkx9PMy7HiizKh1XC+Ic3UGweOvOppUrTTWzg8b4PSdQE IfehkiBXgIGzyxCFENCY2Gw0Wg2OfA+JiYU/rpWl8ydNFqvcODIZ69C6Cex8A63/qM6kfh+oh OodIzRuPKdJG6gLWq92y+XaQ== X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --nika-52902f18-42f8-48a1-b28c-bbc715f51f98 Content-Type: text/plain; charset=UTF-8 Dear all, I intend to commit the attached obvious fix for a NULL pointer dereference within the next 24h unless there are comment or objections. The patch has been checked with valgrind that it prevents invalid reads for the testcase, and it is certainly safe. Regtested on x86_64-pc-linux-gnu. Thanks, Harald --nika-52902f18-42f8-48a1-b28c-bbc715f51f98 Content-Type: text/x-patch Content-Disposition: attachment; filename=pr108434.diff Content-Transfer-Encoding: quoted-printable =46rom e240637f6c2e2605a8424538bee885d899507506 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Wed, 18 Jan 2023 22:13:29 +0100 Subject: [PATCH] Fortran: error recovery for invalid CLASS component [PR108434] gcc/fortran/ChangeLog: PR fortran/108434 * expr.cc (class_allocatable): Prevent NULL pointer dereference or invalid read. (class_pointer): Likewise. gcc/testsuite/ChangeLog: PR fortran/108434 * gfortran.dg/pr108434.f90: New test. =2D-- gcc/fortran/expr.cc | 4 ++-- gcc/testsuite/gfortran.dg/pr108434.f90 | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/pr108434.f90 diff --git a/gcc/fortran/expr.cc b/gcc/fortran/expr.cc index 5ec369c9cd8..3036b1be60f 100644 =2D-- a/gcc/fortran/expr.cc +++ b/gcc/fortran/expr.cc @@ -4996,14 +4996,14 @@ get_union_initializer (gfc_symbol *union_type, gfc= _component **map_p) static bool class_allocatable (gfc_component *comp) { - return comp->ts.type =3D=3D BT_CLASS && CLASS_DATA (comp) + return comp->ts.type =3D=3D BT_CLASS && comp->attr.class_ok && CLASS_DA= TA (comp) && CLASS_DATA (comp)->attr.allocatable; } static bool class_pointer (gfc_component *comp) { - return comp->ts.type =3D=3D BT_CLASS && CLASS_DATA (comp) + return comp->ts.type =3D=3D BT_CLASS && comp->attr.class_ok && CLASS_DA= TA (comp) && CLASS_DATA (comp)->attr.pointer; } diff --git a/gcc/testsuite/gfortran.dg/pr108434.f90 b/gcc/testsuite/gfortr= an.dg/pr108434.f90 new file mode 100644 index 00000000000..e1768a57574 =2D-- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr108434.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! PR fortran/108434 - ICE in class_allocatable +! Contributed by G.Steinmetz + +program p + type t + class(c), pointer :: a(2) ! { dg-error "must have a deferred shape" = } + end type t + class(t), allocatable :: x + class(t), pointer :: y +end =2D- 2.35.3 --nika-52902f18-42f8-48a1-b28c-bbc715f51f98--