From patchwork Tue Jun 4 12:37:33 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Steinhardt X-Patchwork-Id: 13685175 Received: from fhigh7-smtp.messagingengine.com (fhigh7-smtp.messagingengine.com [103.168.172.158]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 360CD145358 for ; Tue, 4 Jun 2024 12:37:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=103.168.172.158 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717504658; cv=none; b=r4gMUJFtd+TXAXadxT7udFNfsHr+ljsCQTFKGaf2VOT+gTCzczW+m5pbhZa+Kxxk5mjvV3hqAL3WsK+Ro6JPr/IKp60tH55yzLqGu1WV5jzGC08ogGC48fuAm0W7l3nLmElbBzgd42aRfnZzgbk88AMEIu5fIZMeXTPb2rRXb3s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1717504658; c=relaxed/simple; bh=jOJvrtiK1ZZQG9O+umhj6DRg9XmcpF6KqWyddA+R11U=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=GHFygkVm9K3YOIPkhtTqYx9QJOjVWDM6S/NYiOzZOnz6rXw3zoJJ1rTIOZOxQ0uvqjsBAvCyqHPW8ZSYJ1Ho9WRYLyDHQDVh5Yri+bWD1rD6sRIb8ZXgCM0mIuNgCiOZ4NqRdC7PFx3G1bXZ/3ZIJv4rl5r5IbtBSm1tNGQmaZs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im; spf=pass smtp.mailfrom=pks.im; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b=mgR/9/Kx; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b=blJLztyZ; arc=none smtp.client-ip=103.168.172.158 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=pks.im Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pks.im Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=pks.im header.i=@pks.im header.b="mgR/9/Kx"; dkim=pass (2048-bit key) header.d=messagingengine.com header.i=@messagingengine.com header.b="blJLztyZ" Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailfhigh.nyi.internal (Postfix) with ESMTP id 61C9311400DB; Tue, 4 Jun 2024 08:37:36 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute6.internal (MEProxy); Tue, 04 Jun 2024 08:37:36 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pks.im; h=cc:cc :content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm1; t=1717504656; x=1717591056; bh=kSpHFFIK7Y z6ix+Y7at8eXoRcuYDsq7+BNCaKaN30Uo=; b=mgR/9/KxR/9ZBgNvzWeLNzLB4u oENMpUQL5B8b010Wdx7h/kq1Lmx8jxNycNCHnw/R1CdCW3teVG1Ye9JUFHGfiZai lESdulanL1pHBxvAZEVe5KH2lqaC7mtXm3yGVeJtP+bidYTdSuG8qP2bd9JaXfNd iXkinECvmeE6YQvFyyAfXy3RSGK0PsFdIbs6Q94n71pAVgkdey/WDCR0YrG01Pqn tPqz3EFEewBYomex1dwl7PgX7EKhw1hui0TlnpJlV1SD1GwU2hi4YRcRT1B4jyNG 1tAbVv/7QX8TveTTB3xog1ePA8Yw+rbOkyGmChX3yFxytUKJ3Oyspex/HmXg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm1; t=1717504656; x=1717591056; bh=kSpHFFIK7Yz6ix+Y7at8eXoRcuYD sq7+BNCaKaN30Uo=; b=blJLztyZkfRAq3hlUPlTnepB9epKxgiuPFTfWUIOUlu6 QI+kcF7wq/W2v3IdZxWPfQnWCwiPJ4P+aWjjRa7UvL4v1B4KtLcDft3Md3vdXtiS ESKfnkUQkqnz5Av4TGav8SLSSP7sWpNE7N2UJRkputlpnqO2RqQ81+naFxDiWc4Q +qLZ1yeEy0vxaiIWdoVFyBpAlVu5xHuTaWkO6i6c/nKVt9mfg2UCSbD2WeD668yf 0jeObsLFP/8VoFRnuyX/XMm5orIXjxTG1loMavV0HxIM7nRXXvZ2YYHUN5hNQQpe iBBklmwF417MTWq8YPbXJO9WkzvwfRnlFM7ZGWtZTQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrvdelgedghedtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvfevuffkfhggtggujgesghdtreertddtvdenucfhrhhomheprfgrthhr ihgtkhcuufhtvghinhhhrghrughtuceophhssehpkhhsrdhimheqnecuggftrfgrthhtvg hrnhepueektdevtdffveeljeetgfehheeigeekleduvdeffeeghefgledttdehjeelffet necuvehluhhsthgvrhfuihiivgepudenucfrrghrrghmpehmrghilhhfrhhomhepphhsse hpkhhsrdhimh X-ME-Proxy: Feedback-ID: i197146af:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Tue, 4 Jun 2024 08:37:35 -0400 (EDT) Received: by localhost (OpenSMTPD) with ESMTPSA id 1828b72c (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Tue, 4 Jun 2024 12:37:08 +0000 (UTC) Date: Tue, 4 Jun 2024 14:37:33 +0200 From: Patrick Steinhardt To: git@vger.kernel.org Cc: Jeff King , Junio C Hamano , Eric Sunshine Subject: [PATCH v4 09/27] line-log: always allocate the output prefix Message-ID: References: Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: The returned string by `output_prefix()` is sometimes a string constant and sometimes an allocated string. This has been fine until now because we always leak the allocated strings, and thus we never tried to free the string constant. Fix the code to always return an allocated string and free the returned value at all callsites. Signed-off-by: Patrick Steinhardt --- line-log.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/line-log.c b/line-log.c index bd3e663c24..67c80b39a0 100644 --- a/line-log.c +++ b/line-log.c @@ -899,14 +899,12 @@ static void print_line(const char *prefix, char first, static char *output_prefix(struct diff_options *opt) { - char *prefix = ""; - if (opt->output_prefix) { struct strbuf *sb = opt->output_prefix(opt, opt->output_prefix_data); - prefix = sb->buf; + return sb->buf; + } else { + return xstrdup(""); } - - return prefix; } static void dump_diff_hacky_one(struct rev_info *rev, struct line_log_data *range) @@ -927,7 +925,7 @@ static void dump_diff_hacky_one(struct rev_info *rev, struct line_log_data *rang const char *c_context = diff_get_color(opt->use_color, DIFF_CONTEXT); if (!pair || !diff) - return; + goto out; if (pair->one->oid_valid) fill_line_ends(rev->diffopt.repo, pair->one, &p_lines, &p_ends); @@ -1002,8 +1000,10 @@ static void dump_diff_hacky_one(struct rev_info *rev, struct line_log_data *rang c_context, c_reset, opt->file); } +out: free(p_ends); free(t_ends); + free(prefix); } /* @@ -1012,7 +1012,11 @@ static void dump_diff_hacky_one(struct rev_info *rev, struct line_log_data *rang */ static void dump_diff_hacky(struct rev_info *rev, struct line_log_data *range) { - fprintf(rev->diffopt.file, "%s\n", output_prefix(&rev->diffopt)); + char *prefix = output_prefix(&rev->diffopt); + + fprintf(rev->diffopt.file, "%s\n", prefix); + free(prefix); + while (range) { dump_diff_hacky_one(rev, range); range = range->next;