From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2100) id B1911393BC19; Sat, 22 Aug 2020 23:00:35 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B1911393BC19 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1598137235; bh=1aq6MBK76UIvNhNUBQisnfLI+RTggVYkKeL/+EuLx6k=; h=From:To:Subject:Date:From; b=dRWR6mtZVM8/16HjtLbac6Akh+Nb6Qlm1rUHFdjNa2fArKtGnXGGv4ICouHMKCQGt B1UH5y/jdp4w7uu9fciy64DRcSPQwLPg1L6VIJx8lb6BDzyf3Q2LRTMTJYYPonP+AL n6iwjK59GZsr+RJJNJiKmPHGxaP9YFP4Ake2SzlA= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Giuliano Belinassi To: gcc-cvs@gcc.gnu.org Subject: [gcc/devel/autopar_devel] PR fortran/95827 - Buffer overflows with submodules and coarrays X-Act-Checkin: gcc X-Git-Author: Harald Anlauf X-Git-Refname: refs/heads/devel/autopar_devel X-Git-Oldrev: 1ce17beb46733c594b388abb12cb0300c188db84 X-Git-Newrev: 9836363c22a283633b36b16b95ea2de97e91d62f Message-Id: <20200822230035.B1911393BC19@sourceware.org> Date: Sat, 22 Aug 2020 23:00:35 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 22 Aug 2020 23:00:35 -0000 https://gcc.gnu.org/g:9836363c22a283633b36b16b95ea2de97e91d62f commit 9836363c22a283633b36b16b95ea2de97e91d62f Author: Harald Anlauf Date: Wed Jun 24 21:03:47 2020 +0200 PR fortran/95827 - Buffer overflows with submodules and coarrays With submodules and coarrays, name mangling results in long internal symbols. Enlarge internal buffer. gcc/fortran/ PR fortran/95827 * iresolve.c (gfc_get_string): Enlarge internal buffer used in generating the mangled name. Diff: --- gcc/fortran/iresolve.c | 4 ++-- gcc/testsuite/gfortran.dg/pr95827.f90 | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/gcc/fortran/iresolve.c b/gcc/fortran/iresolve.c index aa9bb328a0f..73769615c20 100644 --- a/gcc/fortran/iresolve.c +++ b/gcc/fortran/iresolve.c @@ -47,8 +47,8 @@ along with GCC; see the file COPYING3. If not see const char * gfc_get_string (const char *format, ...) { - /* Provide sufficient space to hold "_F.symbol.symbol_MOD_symbol". */ - char temp_name[4 + 2*GFC_MAX_SYMBOL_LEN + 5 + GFC_MAX_SYMBOL_LEN + 1]; + /* Provide sufficient space for "_F.caf_token__symbol.symbol_MOD_symbol". */ + char temp_name[15 + 2*GFC_MAX_SYMBOL_LEN + 5 + GFC_MAX_SYMBOL_LEN + 1]; const char *str; va_list ap; tree ident; diff --git a/gcc/testsuite/gfortran.dg/pr95827.f90 b/gcc/testsuite/gfortran.dg/pr95827.f90 new file mode 100644 index 00000000000..545e344c46d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr95827.f90 @@ -0,0 +1,14 @@ +! { dg-do compile } +! { dg-options "-fcoarray=lib -fsecond-underscore" } +! PR fortran/95827 - ICE in gfc_get_string, at fortran/iresolve.c:70 + +module m2345678901234567890123456789012345678901234567890123456789_123 + interface + module subroutine s2345678901234567890123456789012345678901234567890123456789_123 + end + end interface +end +submodule(m2345678901234567890123456789012345678901234567890123456789_123) & + n2345678901234567890123456789012345678901234567890123456789_123 + integer :: x2345678901234567890123456789012345678901234567890123456789_123[*] +end