From patchwork Fri Nov 10 19:55:21 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Sebor X-Patchwork-Id: 836854 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-466531-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="fZdjZeuH"; dkim-atps=neutral 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 3yYW3w10NNz9s71 for ; Sat, 11 Nov 2017 06:55:39 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:to :from:subject:message-id:date:mime-version:content-type; q=dns; s=default; b=HLLMwf7upenkkdM2AaFzc2UIIiiM+diV612gmD9vbOL7ZTcS9B BL4di8LqtJirQSnch7FXj8KnZG/RyK+KrEynJEfBh8nl82asBuemWVMqYAF77kPt jWOG4KoVIa/8U66A1C5n2+Gp6gbgPqpfJliNWGina2Z8gPIF5e2Kzzu48= 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 :from:subject:message-id:date:mime-version:content-type; s= default; bh=UcnL18e4KMLr+fYCcR2ciT1ZW8k=; b=fZdjZeuHZB+/uvtyc6ri F3V1t2G1LmfIFUOC0BdotapyBkQ8ZLyTnMyn+uajl6Cd4qBf2mJ5G+CRGSNVZ0Uc /FKS7hIENv+/rAZwP2kecVp+XPf2TrYT0aWTgJkQG5gbhCUkROr5acd7BeKXFkXr WUx3XYZWaQiWzcLVEnGU2WU= Received: (qmail 34008 invoked by alias); 10 Nov 2017 19:55:28 -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 32691 invoked by uid 89); 10 Nov 2017 19:55:27 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.9 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, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-ot0-f174.google.com Received: from mail-ot0-f174.google.com (HELO mail-ot0-f174.google.com) (74.125.82.174) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 10 Nov 2017 19:55:26 +0000 Received: by mail-ot0-f174.google.com with SMTP id q99so9103740ota.2 for ; Fri, 10 Nov 2017 11:55:26 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:from:subject:message-id:date:user-agent :mime-version; bh=gb66/p7nThg0WqqZYOKKrVKABIqTjt7OczaQe9LYBjQ=; b=n9ZbwJ9UKiHGQE6zI9FwQbkX5QVk1dQCoM6Vz1/phU/bmEPuIfgVsrPTl9YUT3VfNg nmjF66M42BbbldiXhGEPJUkhavnxI0sG4XiP2QAkFuvuQ1wEJtb0KaVAn9VCd7/xwmZs yC7VSQM8hYBBGrF/eI90AnHHWVJ/xvCZVz1KPWqczzzVh4+JQ++ggS/EHWhPKZl8PdmI 7ocBo5O1OunU3xcWzaDgV6w/QOFvdF6boe5HvyogVLLxgY66qzmmS3qiYOKTv0pMZCD3 XoEtx2RtAwQW2+yjKmC8TiwFqLLMvI/dJ7pn6R5mLv6cFxctnt57cxr1cfjvuzZco2J/ lB4A== X-Gm-Message-State: AJaThX4Fv2i4ZLpFs31dY2fpOVB23HRSdW9/cJr6GQUXV6c5kpXnZ+tC A2CrwxRSRrW1LkUGNAQVA7c= X-Google-Smtp-Source: AGs4zMai3/45mH//DUAteJVEIQHaMVkll1NU/OCIe5b9Gzacs+Cpl+p8DIk02FOwsccuHHrIM9t/aQ== X-Received: by 10.157.59.194 with SMTP id k60mr1004573otc.157.1510343724737; Fri, 10 Nov 2017 11:55:24 -0800 (PST) Received: from localhost.localdomain (75-171-240-43.hlrn.qwest.net. [75.171.240.43]) by smtp.gmail.com with ESMTPSA id 34sm4693598ots.6.2017.11.10.11.55.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 10 Nov 2017 11:55:23 -0800 (PST) To: Gcc Patch List , Mike Stump From: Martin Sebor Subject: [PATCH] avoid -Wstringop-truncation in Darwin bootstrap Message-ID: <7577c627-25ea-1468-e93b-94b29b3618f8@gmail.com> Date: Fri, 10 Nov 2017 12:55:21 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 X-IsSubscribed: yes A few not incorrect but not strictly intended (according to the function's original purpose) uses of strncpy trigger the new -Wstringop-truncation warning because they temporarily leave the copied string without a terminating nul. The attached patch replaces these uses with memcpy to avoid the warning and make it clear (to both the reader and GCC) that the string being constructed is, in fact, not nul terminated until the last call to strcpy. Tested by cross-compiling for x86_64-darwin. For reference, with the attached patch applied the following is the list of outstanding warnings in the build. Diagnostic Count Unique Files -Wsign-compare 4 3 3 -Wimplicit-fallthrough= 4 1 1 -Wimplicit-fallthrough Instances: gengtype-lex.c:380 -Wsign-compare Instances: arlex.c:1352 gengtype-lex.c:1367 syslex.c:1226 Martin gcc/ChangeLog: PR c/81117 * config/darwin-c.c (framework_construct_pathname): Replace strncpy with memcpy. (find_subframework_file): Same. diff --git a/gcc/config/darwin-c.c b/gcc/config/darwin-c.c index 91f08a0..bfb35b9 100644 --- a/gcc/config/darwin-c.c +++ b/gcc/config/darwin-c.c @@ -284,13 +284,13 @@ framework_construct_pathname (const char *fname, cpp_dir *dir) frname = XNEWVEC (char, strlen (fname) + dir->len + 2 + strlen(".framework/") + strlen("PrivateHeaders")); - strncpy (&frname[0], dir->name, dir->len); + memcpy (&frname[0], dir->name, dir->len); frname_len = dir->len; if (frname_len && frname[frname_len-1] != '/') frname[frname_len++] = '/'; - strncpy (&frname[frname_len], fname, fname_len); + memcpy (&frname[frname_len], fname, fname_len); frname_len += fname_len; - strncpy (&frname[frname_len], ".framework/", strlen (".framework/")); + memcpy (&frname[frname_len], ".framework/", strlen (".framework/")); frname_len += strlen (".framework/"); if (fast_dir == 0) @@ -316,7 +316,7 @@ framework_construct_pathname (const char *fname, cpp_dir *dir) /* Append framework_header_dirs and header file name */ for (i = 0; framework_header_dirs[i].dirName; i++) { - strncpy (&frname[frname_len], + memcpy (&frname[frname_len], framework_header_dirs[i].dirName, framework_header_dirs[i].dirNameLen); strcpy (&frname[frname_len + framework_header_dirs[i].dirNameLen], @@ -378,23 +378,23 @@ find_subframework_file (const char *fname, const char *pname) sfrname_len = bufptr - pname; - strncpy (&sfrname[0], pname, sfrname_len); + memcpy (&sfrname[0], pname, sfrname_len); - strncpy (&sfrname[sfrname_len], "Frameworks/", strlen ("Frameworks/")); + memcpy (&sfrname[sfrname_len], "Frameworks/", strlen ("Frameworks/")); sfrname_len += strlen("Frameworks/"); - strncpy (&sfrname[sfrname_len], fname, fname_len); + memcpy (&sfrname[sfrname_len], fname, fname_len); sfrname_len += fname_len; - strncpy (&sfrname[sfrname_len], ".framework/", strlen (".framework/")); + memcpy (&sfrname[sfrname_len], ".framework/", strlen (".framework/")); sfrname_len += strlen (".framework/"); /* Append framework_header_dirs and header file name */ for (i = 0; framework_header_dirs[i].dirName; i++) { - strncpy (&sfrname[sfrname_len], - framework_header_dirs[i].dirName, - framework_header_dirs[i].dirNameLen); + memcpy (&sfrname[sfrname_len], + framework_header_dirs[i].dirName, + framework_header_dirs[i].dirNameLen); strcpy (&sfrname[sfrname_len + framework_header_dirs[i].dirNameLen], &fname[fname_len]);