From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 84463 invoked by alias); 6 Aug 2017 20:07:30 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 84375 invoked by uid 89); 6 Aug 2017 20:07:29 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.6 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=ham version=3.3.2 spammy=Hx-languages-length:3205 X-HELO: mail-qk0-f169.google.com Received: from mail-qk0-f169.google.com (HELO mail-qk0-f169.google.com) (209.85.220.169) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 06 Aug 2017 20:07:26 +0000 Received: by mail-qk0-f169.google.com with SMTP id a77so30976488qkb.0 for ; Sun, 06 Aug 2017 13:07:26 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to; bh=x1bHlixer/dtwtJ9NhR8CH6B6jmGGWkPjlWnKbOAkAc=; b=VwY7hxgeX/zHfdZRi2Ij4jMKXwpuNA3b9uyouBXN6HAl6GfrhwewPO4Oe6MMGm0J6O NjjbiUiRkFkC+M9aWWrr0dDFHhxJ5gbB9muSDy0qrUAB81BKfDBQaViZEJrZp3BUotaK 1NRtynjsv0JMGs0EmkPqq0A3mvvnCtcL+lj/14EEOcxbtpuNnqkZU0qDxtETdIrs7yKz ZlrY+BzBLhc3uK8m2k+pc6tEMZ2qLcQsHHc3GqggVf4sBDawtpuBWD0cB3w7QJhZXX/S GLqirLwvxjpu8SinsckiG8Gr2xIfq0ktzZiyO7+XCqKu2yDrzmQfKvpPLURYl5vZwqTG WrJg== X-Gm-Message-State: AHYfb5jHNkA2l6my090EWYMLSia6rqBaFc+HpA4Q17nu9kD+2FWLnkp5 a/SsYOrzZwaxTLSR X-Received: by 10.55.129.7 with SMTP id c7mr10967226qkd.29.1502050044897; Sun, 06 Aug 2017 13:07:24 -0700 (PDT) Received: from localhost.localdomain (174-16-105-12.hlrn.qwest.net. [174.16.105.12]) by smtp.gmail.com with ESMTPSA id l67sm4712466qkh.34.2017.08.06.13.07.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 06 Aug 2017 13:07:24 -0700 (PDT) Subject: [PATCH 4/4] enhance overflow and truncation detection in strncpy and strncat (PR 81117) To: Jeff Law , Gcc Patch List References: <13944863-99a8-4144-1703-c6e1a2f36425@gmail.com> <0bbc91cd-fcdb-be61-e1d0-4b230f23b1a9@redhat.com> <4f4fbd4c-cb46-b80d-5749-ebb6bb050bc4@gmail.com> From: Martin Sebor Message-ID: <11f5f0e3-b3c6-233f-c736-91bbe36247ca@gmail.com> Date: Sun, 06 Aug 2017 20:07:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------4B2837857767EF03106CE68C" X-IsSubscribed: yes X-SW-Source: 2017-08/txt/msg00470.txt.bz2 This is a multi-part message in MIME format. --------------4B2837857767EF03106CE68C Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 169 For completeness, patch 4 are the (already preapproved) fixups to GCC to let it compile with the -Wstringop-truncation option. I will commit this patch shortly. Martin --------------4B2837857767EF03106CE68C Content-Type: text/x-patch; name="gcc-81117-4.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="gcc-81117-4.diff" Content-length: 3119 PR c/81117 - Improve buffer overflow checking in strncpy gcc/ada/ChangeLog: PR c/81117 * adadecode.c (__gnat_decode): Replace pointless strncpy with memcpy. * argv.c (__gnat_fill_arg): Same. gcc/c-family/ChangeLog: PR c/81117 * c-common.c (resort_sorted_fields): Replace pointless strncpy with memcpy. gcc/fortran/ChangeLog: PR c/81117 * decl.c (build_sym): Replace pointless strncpy with strcpy. gcc/objc/ChangeLog: PR c/81117 * objc-encoding.c (encode_type): Replace pointless strncpy with memcpy. diff --git a/gcc/ada/adadecode.c b/gcc/ada/adadecode.c index 8c9c7ab..0cbef81 100644 --- a/gcc/ada/adadecode.c +++ b/gcc/ada/adadecode.c @@ -330,7 +330,7 @@ __gnat_decode (const char *coded_name, char *ada_name, int verbose) } /* Write symbol in the space. */ - strncpy (optoken, trans_table[k][1], oplen); + memcpy (optoken, trans_table[k][1], oplen); } else k++; diff --git a/gcc/ada/argv.c b/gcc/ada/argv.c index 430404e..aee0f88 100644 --- a/gcc/ada/argv.c +++ b/gcc/ada/argv.c @@ -92,7 +92,7 @@ void __gnat_fill_arg (char *a, int i) { if (gnat_argv != NULL) - strncpy (a, gnat_argv[i], strlen(gnat_argv[i])); + memcpy (a, gnat_argv[i], strlen (gnat_argv[i])); } int @@ -118,7 +118,7 @@ void __gnat_fill_env (char *a, int i) { if (gnat_envp != NULL) - strncpy (a, gnat_envp[i], strlen (gnat_envp[i])); + memcpy (a, gnat_envp[i], strlen (gnat_envp[i])); } #ifdef __cplusplus diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index feb0904..8c18caf 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -5942,10 +5942,10 @@ resort_sorted_fields (void *obj, static char * catenate_strings (const char *lhs, const char *rhs_start, int rhs_size) { - const int lhs_size = strlen (lhs); + const size_t lhs_size = strlen (lhs); char *result = XNEWVEC (char, lhs_size + rhs_size); - strncpy (result, lhs, lhs_size); - strncpy (result + lhs_size, rhs_start, rhs_size); + memcpy (result, lhs, lhs_size); + memcpy (result + lhs_size, rhs_start, rhs_size); return result; } diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 54ee5d3..82971e8 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -1417,11 +1417,9 @@ build_sym (const char *name, gfc_charlen *cl, bool cl_deferred, { char u_name[GFC_MAX_SYMBOL_LEN + 1]; gfc_symtree *st; - int nlen; - nlen = strlen(name); - gcc_assert (nlen <= GFC_MAX_SYMBOL_LEN); - strncpy (u_name, name, nlen + 1); + gcc_assert (strlen(name) <= GFC_MAX_SYMBOL_LEN); + strcpy (u_name, name); u_name[0] = upper; st = gfc_find_symtree (gfc_current_ns->sym_root, u_name); diff --git a/gcc/objc/objc-encoding.c b/gcc/objc/objc-encoding.c index 2a2dfa5..e5d4f38 100644 --- a/gcc/objc/objc-encoding.c +++ b/gcc/objc/objc-encoding.c @@ -734,7 +734,7 @@ encode_type (tree type, int curtype, int format) /* Rewrite "in const" from "nr" to "rn". */ if (curtype >= 1 && !strncmp (enc - 1, "nr", 2)) - strncpy (enc - 1, "rn", 2); + memcpy (enc - 1, "rn", 2); } } } --------------4B2837857767EF03106CE68C--