From patchwork Sun Mar 13 02:22:53 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerry DeLisle X-Patchwork-Id: 596702 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3qN4S073xdz9s36 for ; Sun, 13 Mar 2016 13:23:27 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=CzBzyyPk; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:to:cc :from:subject:message-id:date:mime-version:content-type; q=dns; s=default; b=U+Ez+hTEzXtlUdaOz36FxIzCB//sZ7b6rbAniUZC+kVCeLaXVW MtXxzuH9IZ66eLXts9xu6wwjEj3JrIr5QgRv2WVENETXjx2cNWu046vYyqinfPoh 80a7iKPDRCzQ2Q3tpcZB2JRDoc3PKYBS2BOPJJDCNKz9K+WJhBFpgvbDk= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:to:cc :from:subject:message-id:date:mime-version:content-type; s= default; bh=z4am174P05hFuVC/R4B22P7bLxo=; b=CzBzyyPkmhxA0zuy6jK/ Cr3FG7xo+8gu+leFiTx1lDTXtfqyQ62LiJHyYrtMzuW1fwCoU6Rn0MKgtDLzKHgV o8nkzcrgonRmc7k4K6LsAtkwXOE405/SHJgA+bLw/iypG17rEl6Cp/ZmKQSX2HmI Tp7ZjVzXIyK1APdWWerO6hw= Received: (qmail 22709 invoked by alias); 13 Mar 2016 02:23:08 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 22653 invoked by uid 89); 13 Mar 2016 02:23:06 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.5 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE, RP_MATCHES_RCVD, SPF_PASS autolearn=ham version=3.3.2 spammy=Trying, x86-64-linux, x8664linux, Jim X-Spam-User: qpsmtpd, 2 recipients X-HELO: mtaout002-public.msg.strl.va.charter.net Received: from mtaout002-public.msg.strl.va.charter.net (HELO mtaout002-public.msg.strl.va.charter.net) (68.114.190.27) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 13 Mar 2016 02:22:56 +0000 Received: from impout006 ([68.114.189.21]) by mtaout002.msg.strl.va.charter.net (InterMail vM.9.00.021.00 201-2473-182) with ESMTP id <20160313022254.FMWY4871.mtaout002.msg.strl.va.charter.net@impout006>; Sat, 12 Mar 2016 20:22:54 -0600 Received: from quattro.localdomain ([96.41.215.23]) by impout006 with charter.net id VENt1s00E0Wrkg001ENtcT; Sat, 12 Mar 2016 20:22:54 -0600 X-Authority-Analysis: v=2.1 cv=b4U8472x c=1 sm=1 tr=0 a=salB9WdMPIDduBH7JsZfrA==:117 a=salB9WdMPIDduBH7JsZfrA==:17 a=L9H7d07YOLsA:10 a=9cW_t1CCXrUA:10 a=s5jvgZ67dGcA:10 a=r77TgQKjGQsHNAKrUKIA:9 a=mDV3o1hIAAAA:8 a=1EsaE_6oAAAA:8 a=vHqdhS9e77NlxuNTU2kA:9 a=QEXdDO2ut3YA:10 a=J-1Eg6CRu-IA:10 a=kEaJ4oXbktfq7_1t3a8A:9 a=yz7xuxPvup9qMid-8T8A:9 a=oPCS10ad1eYA:10 X-Auth-id: anZkZWxpc2xlQGNoYXJ0ZXIubmV0 To: gfortran Cc: gcc patches From: Jerry DeLisle Subject: [patch, fortran] PR69043 Trying to include a directory causes an infinite loop Message-ID: <56E4CEFD.20102@charter.net> Date: Sat, 12 Mar 2016 18:22:53 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.0 MIME-Version: 1.0 I plan to commit the attached patch and test case under simple and obvious tomorrow. Regression tested on x86-64-linux. Regards, Jerry 2016-03-13 Jerry DeLisle Jim MacArthur PR fortran/69043 * scanner.c (load_file): Check that included file is not a directory. diff --git a/gcc/fortran/scanner.c b/gcc/fortran/scanner.c index c4e7974..d4c14bc 100644 --- a/gcc/fortran/scanner.c +++ b/gcc/fortran/scanner.c @@ -2200,6 +2200,8 @@ load_file (const char *realfilename, const char *displayedname, bool initial) FILE *input; int len, line_len; bool first_line; + struct stat st; + int stat_result; const char *filename; /* If realfilename and displayedname are different and non-null then surely realfilename is the preprocessed form of @@ -2227,6 +2229,7 @@ load_file (const char *realfilename, const char *displayedname, bool initial) } else input = gfc_open_file (realfilename); + if (input == NULL) { gfc_error_now ("Can't open file %qs", filename); @@ -2242,6 +2245,16 @@ load_file (const char *realfilename, const char *displayedname, bool initial) current_file->filename, current_file->line, filename); return false; } + + stat_result = stat (realfilename, &st); + if (stat_result == 0 && st.st_mode & S_IFDIR) + { + fprintf (stderr, "%s:%d: Error: Included path '%s'" + " is a directory.\n", + current_file->filename, current_file->line, filename); + fclose (input); + return false; + } } /* Load the file.