From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.15.18]) by sourceware.org (Postfix) with ESMTPS id B3F3F381FE4A; Thu, 15 Sep 2022 20:51:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B3F3F381FE4A 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.net; s=badeba3b8450; t=1663275092; bh=xqhkuZPgH68RPtyLha4Wxg6lbb5YobMhaxCZfeCPyGc=; h=X-UI-Sender-Class:From:To:Subject:Date; b=M1vu2CbWRFTvBHwkxPFNjQufhPEodUEEt+b+OiCm/LEww/D1ipCE5WGrRm0DKeNIv Ou69lNeJwO5M2sCFgmRDy0auxPsZCtnB5zdLUJJW8gHHvmeGzYBq+V+IJt03Kw7E6f gISguE50RBrtgY9RMf2DfpVFf5KG86jFzYXRksMA= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [93.207.80.54] ([93.207.80.54]) by web-mail.gmx.net (3c-app-gmx-bs27.server.lan [172.19.170.79]) (via HTTP); Thu, 15 Sep 2022 22:51:32 +0200 MIME-Version: 1.0 Message-ID: From: Harald Anlauf To: fortran , gcc-patches Subject: [PATCH, committed] Fortran: catch NULL pointer dereferences while simplifying PACK [PR106857] Content-Type: multipart/mixed; boundary=refeik-8b6c5e7a-820c-43a6-94d5-15c7572e09e5 Date: Thu, 15 Sep 2022 22:51:32 +0200 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:5nNn1G6XD4EvKr9DLN9nHAM35Wl2/XIMqAXP1gNa2RKZykn53DQ3HlFysFvce8t1LB85J AOnaVAN1sGN4JZ3eZjRpV/F3/8WrMszC0RBr3YTH6vGr0HfynIx7QaAvfvSQxYdvhXH1pAe2w5N3 Q+0qe4swIwxRpVu03UgTUBOx5NP2/F+mAno4JskWiuFXCWAFM7SlapD1ou9f2AcVox5KBADmUB6u 63I6njeAyjNQM4Fl+yytcgwkqIYVBdGj6Afqp2M/5zMzUp+fySlyfFvvn4yapnDI2IrE7aDitGXq 8c= X-UI-Out-Filterresults: notjunk:1;V03:K0:q8HfCOcvPOg=:+NLNR1VJmXEmrV/HhqN3oY 7N7X6edy5tOhPh9IS/51dnEk+Xcjv6cM/zD+LqK+pihQYZs6Fe6h9BaJY04kYGsAFUmXav93P f3AXtFwW5WRjvb1QIBsTdjFy4DlOnEL0ZlShFxFwJJmlK8m71Tf0utJ3NVdXR074Hat+Hoa0E 0y9rcyceKkflfHc796AbmgneCwwxIZYMpJD9ma0Egd9Z4zGnhbDCFUeorHi6ayu8leUmPkGvw lNlxrjLYUxaaQ73hSsNOlQqruM2pVg56mRMU8kiSCpE2KqdLW2gLDI72sJYFNHbpk0ew4e0fQ eBFH1UJ6wBxk4ZvDJFYf3eKFKBKmb28DI6YTImty9lMEntfBLFfcVN6Kb9Dbx8AroeXvZvfvv C2trnAbf06eHV1yZGoQFkGq9sDCNZGHJyj3wzHG6SMl6gyEakAopa1bvc+d15deQ9LQ8inYvH L0beBTX9QhLrCaWpI8201vWLOkKQxx9Yk9QeUFjH2VnjHhbh8fJYpmuCBl7FTAGb9ZaYxRxNI HGtRMjaYVmQu+JHl0Zy70KCqvyjEufR9uvg/l2Kw4PJxCfI1Hkfv9emnFBFfl/AK3aOEwgHra 9QuR/BIm/QzPvrFMMtuXcMguJxZPFHYb3Do12oXG2pWYJhSK2ObZ753gSCUf1PL6G9dQHbTtm GjZGJFIqzPS2z92qP91gDTghFn7mIaCfXHawKlHy0hF99j9hqNnLNe3S4bZUSUYwwl1TKNb6m DAGyYfUB9e5bxif32lktCwiLFlYyLVYX7ZSDfNBHI8YvYNB0O/EALsb+Ybso51fcowGJ0PNKh qpJkzq8 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,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: --refeik-8b6c5e7a-820c-43a6-94d5-15c7572e09e5 Content-Type: text/plain; charset=UTF-8 Dear all, we hit a NULL pointer dereference when trying to simplify PACK when the MASK argument was present. The obvious and trivial solution is to check for NULL pointer dereferences why looking at the constructor for the ARRAY argument, which we already do in the case the MASK is not present. Committed to mainline after regtesting on x86_64-pc-linux-gnu as commit r13-2691-g2b75d5f533b9d6b39f4055949aff64ed0d22dd24 This is a 10/11/12/13 regression, so I will check if it can be backported. Thanks, Harald --refeik-8b6c5e7a-820c-43a6-94d5-15c7572e09e5 Content-Type: text/x-patch Content-Disposition: attachment; filename=pr106857.diff Content-Transfer-Encoding: quoted-printable =46rom 2b75d5f533b9d6b39f4055949aff64ed0d22dd24 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Thu, 15 Sep 2022 22:39:24 +0200 Subject: [PATCH] Fortran: catch NULL pointer dereferences while simplifyin= g PACK [PR106857] gcc/fortran/ChangeLog: PR fortran/106857 * simplify.cc (gfc_simplify_pack): Check for NULL pointer dereferences while walking through constructors (error recovery). gcc/testsuite/ChangeLog: PR fortran/106857 * gfortran.dg/pr106857.f90: New test. =2D-- gcc/fortran/simplify.cc | 2 +- gcc/testsuite/gfortran.dg/pr106857.f90 | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/pr106857.f90 diff --git a/gcc/fortran/simplify.cc b/gcc/fortran/simplify.cc index bc178d54891..140c17721a7 100644 =2D-- a/gcc/fortran/simplify.cc +++ b/gcc/fortran/simplify.cc @@ -6431,7 +6431,7 @@ gfc_simplify_pack (gfc_expr *array, gfc_expr *mask, = gfc_expr *vector) /* Copy only those elements of ARRAY to RESULT whose MASK equals .TRUE.. */ mask_ctor =3D gfc_constructor_first (mask->value.constructor); - while (mask_ctor) + while (mask_ctor && array_ctor) { if (mask_ctor->expr->value.logical) { diff --git a/gcc/testsuite/gfortran.dg/pr106857.f90 b/gcc/testsuite/gfortr= an.dg/pr106857.f90 new file mode 100644 index 00000000000..4b0f86a75a6 =2D-- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr106857.f90 @@ -0,0 +1,12 @@ +! { dg-do compile } +! PR fortran/106857 - ICE in gfc_simplify_pack +! Contributed by G.Steinmetz + +program p + type t + integer :: n + end type + type(t), parameter :: a(2,2) =3D t(1) + type(t), parameter :: b(4) =3D reshape(a, [2]) = ! { dg-error "Different shape" } + type(t), parameter :: c(2) =3D pack(b, [.false.,.true.,.false.,.true.])= ! { dg-error "Different shape" } +end =2D- 2.35.3 --refeik-8b6c5e7a-820c-43a6-94d5-15c7572e09e5--