From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) by sourceware.org (Postfix) with ESMTPS id 189583857C52; Mon, 25 Jan 2021 20:43:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 189583857C52 X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [93.207.85.226] ([93.207.85.226]) by web-mail.gmx.net (3c-app-gmx-bap58.server.lan [172.19.172.128]) (via HTTP); Mon, 25 Jan 2021 21:43:00 +0100 MIME-Version: 1.0 Message-ID: From: Harald Anlauf To: Thomas Koenig Cc: fortran , gcc-patches Subject: Re: [PATCH] PR fortran/70070 - ICE on initializing character data beyond min/max bound Content-Type: multipart/mixed; boundary=abmob-8eb3fcfa-f605-4174-b574-7a36c10e193d Date: Mon, 25 Jan 2021 21:43:00 +0100 Importance: normal Sensitivity: Normal In-Reply-To: <3fe4244d-60b1-c7f1-10d2-4761428ca64f@netcologne.de> References: <3fe4244d-60b1-c7f1-10d2-4761428ca64f@netcologne.de> X-UI-Message-Type: mail X-Priority: 3 X-Provags-ID: V03:K1:zhF/E37p9T9yr9g9gZZ0tJ0lVXHH+EgWJKkkdLNGVMXXOQDXdFWt5tEf7auaVTY9cD7de oFpv0QRlArvzoT8nwWR1nBQRmxUIGNkJCQEoBByOP1h+mFSEJKicT0BcH6kD2ZmjUNyRQbZuap5I tjEwCFyk8PiNkeLzQ9+qVqvgkHoGHGhyxbs1uCV1aqFqiKDwZo79xShvEBpO4JDhEmqgiFytd72j bKS2ln8dNbNgRsFMZ+Toj8GPf3tEnwRF9zjQ59F1cXXlRaqJtBabLoq6eHQv6VjoZiEljGZCwPwu M0= X-UI-Out-Filterresults: notjunk:1;V03:K0:7Hj63Y352LY=:cBh/ijgSInfSJilKnuNCaz Ci1azoCs+69QnjE90s8dcQ5c3yY5Zk3XYwxFKvxlmTsepXuaJpRfirSbh7w3W3W2+3cJsTzIJ L5qME2oqMKxMnB2CHcuLY138R0UQk1hrtQyMdXJxNuejo9MH+qrzoidsBlILUmeNKim/NuLI8 Zop0EeWGQIu6/T/+2KC+GgbMRiMmhINB5DGyCj773NKh6lRF/esVBX+tIooK7LVFcS4XVOrUk cmJgNCJAjRbxPHWwQ9MJWDBka/fGaUVZe9TuESQaq/q8KW1AteVc7BX1H+qROLDhimMwXa3K4 20tX5PVUd1thToGQ8V8zUY7ei4A24vGO1c3PQwl6EEWQSz/UoNVTB+w1Y4epznIN3reeFSuyF TbNDlRyJimFlBk7gfD9mo1VHv9DtrIlL1eOuoac7Z1m4fVal0EYHbd4CC9r6sLtQqaWaUHhSE 0FiHwc6OClDskD1Qeh31jsVjmg4iN1aqN9QD47d84wmKhkb5M/Xao9FdmTH33X+cPfdvs5fKQ 8OojWmeIEtAAx5L3FhbDsrmQvOc49L+J7E+sHGE5bddRmYfjXDL1G4KLghnmqe03+a26BO3sb 7YxlKBgECjybY= X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: fortran@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Fortran mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 25 Jan 2021 20:43:05 -0000 --abmob-8eb3fcfa-f605-4174-b574-7a36c10e193d Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Thomas, > Gesendet: Montag, 25. Januar 2021 um 19:58 Uhr > Von: "Thomas Koenig" > a.f90:3:10: > > 3 | print a(0:3) > | 1 > Error: Substring start index at (1) is less than one > a.f90:4:10: > > 4 | print a(1:4) > | 1 > Error: Substring end index at (1) exceeds the string length > > Could you maybe just re-use these? this is done in the attached patch. Committed and pushed to master. > OK with adjusted error message. Thanks for the patch! Thanks for the review! Harald --abmob-8eb3fcfa-f605-4174-b574-7a36c10e193d Content-Type: application/octet-stream Content-Disposition: attachment; filename=pr70070.patch-v2 Content-Transfer-Encoding: quoted-printable diff --git a/gcc/fortran/data.c b/gcc/fortran/data.c index 1313b335c86..13e3506dd1e 100644 =2D-- a/gcc/fortran/data.c +++ b/gcc/fortran/data.c @@ -183,6 +183,19 @@ create_character_initializer (gfc_expr *init, gfc_typ= espec *ts, } } + if (start < 0) + { + gfc_error ("Substring start index at %L is less than one", + &ref->u.ss.start->where); + return NULL; + } + if (end > init->value.character.length) + { + gfc_error ("Substring end index at %L exceeds the string length", + &ref->u.ss.end->where); + return NULL; + } + if (rvalue->ts.type =3D=3D BT_HOLLERITH) { for (size_t i =3D 0; i < (size_t) len; i++) @@ -576,6 +589,8 @@ gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rva= lue, mpz_t index, if (lvalue->ts.u.cl->length =3D=3D NULL && !(ref && ref->u.ss.lengt= h !=3D NULL)) return false; expr =3D create_character_initializer (init, last_ts, ref, rvalue); + if (!expr) + return false; } else { diff --git a/gcc/testsuite/gfortran.dg/pr70070.f90 b/gcc/testsuite/gfortra= n.dg/pr70070.f90 new file mode 100644 index 00000000000..04a6dd585ab =2D-- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr70070.f90 @@ -0,0 +1,8 @@ +! { dg-do compile } +! PR fortran/70070 - ICE on initializing character data beyond min/max bo= und + +program p + character(1) :: a, b + data (a(i:i),i=3D0,0) /1*'#'/ ! { dg-error "Substring start index" } + data (b(i:i),i=3D2,3) /2*'#'/ ! { dg-error "Substring end index" } +end --abmob-8eb3fcfa-f605-4174-b574-7a36c10e193d--