From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) by sourceware.org (Postfix) with ESMTPS id 0C9223858D33; Mon, 23 Jan 2023 21:23:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0C9223858D33 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=1674509034; bh=db7HJHKCBBrphjJAqe9h3cR1eTY9atId7RLt6hOrEzA=; h=X-UI-Sender-Class:From:To:Subject:Date; b=KLc9YB84cCCxhBdEdtvqDjfJt7TH27qhS26pRz0KXxIlq5rRZnvis87KpXXLQVGW/ PU8iI4iB0aO/Nmvtz9ol8Ar1qFTYED3m3zx+puN4ldSRxrsogVG0gBjudtbxfYy1ga uTQqj7KapXLka1l66vLOi5q51qkgOPBOPNxZsuTGXZuecrJwqphrbo05wP5jOp5wls 1lax4V/UwbrAcqHwqZmafcI7zfOOH5RZkXl1JsKu6vSQOLzgsKpxUOposP6Ld2g/Lt KVAaisSdY9rKCnVdusbHM089haIVh9ExTg0PyOKzQop8pJgrMIoqhvbj8VMgp6vJx9 y0YdVXgvkOPTw== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [93.207.90.148] ([93.207.90.148]) by web-mail.gmx.net (3c-app-gmx-bap50.server.lan [172.19.172.120]) (via HTTP); Mon, 23 Jan 2023 22:23:54 +0100 MIME-Version: 1.0 Message-ID: From: Harald Anlauf To: fortran , gcc-patches Subject: [PATCH] Fortran: fix NULL pointer dereference in gfc_check_dependency [PR108502] Content-Type: multipart/mixed; boundary=abmob-7d008c32-6ce3-48c0-ae6d-a35179abb661 Date: Mon, 23 Jan 2023 22:23:54 +0100 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:G3dDCyBrMcY9B9pRmxMjLRFpVWY1kVNGJiTT13AGS06EIEX01mhjbA4YsZQsC5KX+T5bF E1txwwFgljKdzwBpb4MIhGffp3rfoW5us0SwvaOPatGmzTX/m3NAU/wSFGM6F5YVOxtLLtJ0/c9H BBV9frOnXZczGymjku5eDgmZ682baqPuvZzP5Fby9oDJTjXywVRsGG3s43l0ZJccSsByLRxKZ8Z8 FAv772VQwFuTDc7SjvInmpwaQfQL6J8ASqrMzfuj1xXYWqdp0emt1xE1Ue8hjPz7rDqhxvLxk6zH 4A= UI-OutboundReport: notjunk:1;M01:P0:UI0lnDTvHck=;JL9MIcfdBUh99PtI5/H8Qj/+HDR lFXkmf6s4SHGbycqZDWTc/oxnxJe5fWT4dVgk8+YJG+KBpLmg1gGjfogdQwmhFps2EHxpPPCY 33SE3pRPqYLnFmjdrRkbiiDVHsHpDdGD8QnXpyWYI9wGZyKPSe95QunuuKNT+CsVBQjFfWgy2 0yo1sTZ2zQGC/S7+rur8Z5cdt5IAV4yoMhL8M/ml+jUZGJjgHNgrdVXsk31ldgcao5E57klId qWQyjETVqzB5t0B4Gfif4vkfcoXGCyHSuPUprKntXXbO5/RuTpCkuMZpWqfHOqTsu1/Orrj5S USdUg05toSaZl6zwMMO1GZK//oC1/40Vhzst1dLv82LhK1Mit0FN8gBthag/pik7CoXziClch btTTbjbZdXPglicyf58VzAL2/JlcXUb5q/mWxjrFZvnFYOgBI94DEve7Kcg2/tukpqKPtzWny 3bPRsXI3UF2AGV3EhUb90lv6uBo9PmXf/Ip9heC/kSLplOA44dRcygcYSnjIHamor362JI9nY zlLW+E5CbQTQsCViHCc6MjHOrJXsL0XBdArLhxDYLVjtRv3rUoySDthdj26o/g2sWKbo+tyRm TsDPBiczTtk9QDNO+lgQqUX4rdKnC0pE75+VXJdQrvNRLT6AQXytH9PdHRPLQQ5Y9vmUMvTzJ 82kR7QuL3J7UuA3EAFISDVj5LoxFt8qghBwmzeVha7CJvaSb0ZLJn0GEr0SGHzecwr4+ufiet iJTVcUxOsKt8qt1WzvqYDHeMATC5O1Uhg5AJphVz2N46dVqo6BwQfzAMXDJPpe9UrC6kp4+Ce LR+0OCkie6szQ1FPQ84VeTLvE0XHh6pzrhmprAkM9lgVU= X-Spam-Status: No, score=-13.1 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: --abmob-7d008c32-6ce3-48c0-ae6d-a35179abb661 Content-Type: text/plain; charset=UTF-8 Dear all, the code in the PR demonstrates that dependency checking in the frontend optimization was not recovering well from invalid code, leading to a NULL pointer dereference. An easy and really obvious fix. Regtested on x86_64-pc-linux-gnu. OK for mainline? Thanks, Harald --abmob-7d008c32-6ce3-48c0-ae6d-a35179abb661 Content-Type: text/x-patch Content-Disposition: attachment; filename=pr108502.diff Content-Transfer-Encoding: quoted-printable =46rom d27e1b13ba312411ce271f5122f694ffe6c051e6 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Mon, 23 Jan 2023 22:13:44 +0100 Subject: [PATCH] Fortran: fix NULL pointer dereference in gfc_check_depend= ency [PR108502] gcc/fortran/ChangeLog: PR fortran/108502 * dependency.cc (gfc_check_dependency): Prevent NULL pointer dereference while recursively checking expressions. gcc/testsuite/ChangeLog: PR fortran/108502 * gfortran.dg/pr108502.f90: New test. =2D-- gcc/fortran/dependency.cc | 5 +++++ gcc/testsuite/gfortran.dg/pr108502.f90 | 12 ++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/pr108502.f90 diff --git a/gcc/fortran/dependency.cc b/gcc/fortran/dependency.cc index 43417a6ec76..9117825ee6e 100644 =2D-- a/gcc/fortran/dependency.cc +++ b/gcc/fortran/dependency.cc @@ -1292,6 +1292,11 @@ gfc_check_dependency (gfc_expr *expr1, gfc_expr *ex= pr2, bool identical) if (expr1->expr_type !=3D EXPR_VARIABLE) gfc_internal_error ("gfc_check_dependency: expecting an EXPR_VARIABLE= "); + /* Prevent NULL pointer dereference while recursively analyzing invalid + expressions. */ + if (expr2 =3D=3D NULL) + return 0; + switch (expr2->expr_type) { case EXPR_OP: diff --git a/gcc/testsuite/gfortran.dg/pr108502.f90 b/gcc/testsuite/gfortr= an.dg/pr108502.f90 new file mode 100644 index 00000000000..45f73849c57 =2D-- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr108502.f90 @@ -0,0 +1,12 @@ +! { dg-do compile } +! { dg-options "-O2 -ffrontend-optimize" } +! PR fortran/108502 - ICE in gfc_check_dependency +! Contributed by G.Steinmetz + +integer function n() + integer :: a(1) + a =3D [1] / 0 +end +program p + integer :: b =3D n() ! { dg-error "must be an intrinsic function" } +end =2D- 2.35.3 --abmob-7d008c32-6ce3-48c0-ae6d-a35179abb661--