From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1873) id 1ED763858414; Mon, 29 Nov 2021 00:28:11 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1ED763858414 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Iain Buclaw To: gcc-cvs@gcc.gnu.org Subject: [gcc r11-9325] d: Insert null terminator in obstack buffers X-Act-Checkin: gcc X-Git-Author: Iain Buclaw X-Git-Refname: refs/heads/releases/gcc-11 X-Git-Oldrev: 65642f4e6609aa992da0f4c7016aa26a7fc157ab X-Git-Newrev: abd47b4abea7e1463706c1132dc78d468d27bd96 Message-Id: <20211129002811.1ED763858414@sourceware.org> Date: Mon, 29 Nov 2021 00:28:11 +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: Mon, 29 Nov 2021 00:28:11 -0000 https://gcc.gnu.org/g:abd47b4abea7e1463706c1132dc78d468d27bd96 commit r11-9325-gabd47b4abea7e1463706c1132dc78d468d27bd96 Author: Iain Buclaw Date: Mon Jul 26 17:06:08 2021 +0200 d: Insert null terminator in obstack buffers Covers cases where functions that handle the extracted strings ignore the explicit length. This isn't something that's known to happen in the current front-end, but the self-hosted front-end has been observed to do this in its conversions between D and C-style strings. gcc/d/ChangeLog: * d-lang.cc (deps_add_target): Insert null terminator in buffer. (deps_write): Likewise. (d_parse_file): Likewise. (cherry picked from commit b2abe4e1aded1409964b870899d18dfdb6384821) Diff: --- gcc/d/d-lang.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gcc/d/d-lang.cc b/gcc/d/d-lang.cc index 6ad3823d910..3e6566a3689 100644 --- a/gcc/d/d-lang.cc +++ b/gcc/d/d-lang.cc @@ -108,7 +108,7 @@ deps_add_target (const char *target, bool quoted) if (!quoted) { - obstack_grow (&buffer, target, strlen (target)); + obstack_grow0 (&buffer, target, strlen (target)); d_option.deps_target.safe_push ((const char *) obstack_finish (&buffer)); return; } @@ -149,6 +149,7 @@ deps_add_target (const char *target, bool quoted) obstack_1grow (&buffer, *p); } + obstack_1grow (&buffer, '\0'); d_option.deps_target.safe_push ((const char *) obstack_finish (&buffer)); } @@ -278,6 +279,8 @@ deps_write (Module *module, obstack *buffer) obstack_grow (buffer, str, strlen (str)); obstack_grow (buffer, ":\n", 2); } + + obstack_1grow (buffer, '\0'); } /* Implements the lang_hooks.init_options routine for language D. @@ -884,6 +887,7 @@ d_parse_file (void) obstack_grow (&buffer, str, strlen (str)); } + obstack_1grow (&buffer, '\0'); message ("%s", (char *) obstack_finish (&buffer)); } }