From: Johannes Sixt <j.sixt@viscovery.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: Git Mailing List <git@vger.kernel.org>
Subject: [PATCH 1/2] sideband.c: Use xmalloc() instead of variable-sized arrays.
Date: Tue, 08 Jan 2008 17:24:18 +0100 [thread overview]
Message-ID: <4783A3B2.3060801@viscovery.net> (raw)
From: Johannes Sixt <johannes.sixt@telecom.at>
How come we got along with this not very portable construct for so long?
Probably because the array sizes were computed from the results of
strlen() of string constants. Anyway, a follow-up patch will make the
lengths really non-constant.
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
---
sideband.c | 14 ++++++++++++--
1 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/sideband.c b/sideband.c
index 756bbc2..513d7b3 100644
--- a/sideband.c
+++ b/sideband.c
@@ -19,7 +19,10 @@ int recv_sideband(const char *me, int in_stream, int out, int err)
{
unsigned pf = strlen(PREFIX);
unsigned sf = strlen(SUFFIX);
- char buf[pf + LARGE_PACKET_MAX + sf + 1];
+ char *buf, *save;
+
+ save = xmalloc(sf);
+ buf = xmalloc(pf + LARGE_PACKET_MAX + sf + 1);
memcpy(buf, PREFIX, pf);
while (1) {
int band, len;
@@ -29,6 +32,8 @@ int recv_sideband(const char *me, int in_stream, int out, int err)
if (len < 1) {
len = sprintf(buf, "%s: protocol error: no band designator\n", me);
safe_write(err, buf, len);
+ free(buf);
+ free(save);
return SIDEBAND_PROTOCOL_ERROR;
}
band = buf[pf] & 0xff;
@@ -38,6 +43,8 @@ int recv_sideband(const char *me, int in_stream, int out, int err)
buf[pf] = ' ';
buf[pf+1+len] = '\n';
safe_write(err, buf, pf+1+len+1);
+ free(buf);
+ free(save);
return SIDEBAND_REMOTE_ERROR;
case 2:
buf[pf] = ' ';
@@ -59,7 +66,6 @@ int recv_sideband(const char *me, int in_stream, int out, int err)
* line data actually contains something.
*/
if (brk > pf+1 + 1) {
- char save[sf];
memcpy(save, buf + brk, sf);
buf[brk + sf - 1] = buf[brk - 1];
memcpy(buf + brk - 1, SUFFIX, sf);
@@ -83,9 +89,13 @@ int recv_sideband(const char *me, int in_stream, int out, int err)
"%s: protocol error: bad band #%d\n",
me, band);
safe_write(err, buf, len);
+ free(buf);
+ free(save);
return SIDEBAND_PROTOCOL_ERROR;
}
}
+ free(buf);
+ free(save);
return 0;
}
--
1.5.4.rc2.815.g2f849-dirty
next reply other threads:[~2008-01-08 16:24 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-08 16:24 Johannes Sixt [this message]
2008-01-08 17:01 ` [PATCH 1/2] sideband.c: Use xmalloc() instead of variable-sized arrays Nicolas Pitre
2008-01-09 7:34 ` Johannes Sixt
2008-01-09 7:53 ` Junio C Hamano
2008-01-09 8:06 ` Johannes Sixt
2008-01-09 19:14 ` Nicolas Pitre
2008-01-08 17:41 ` Junio C Hamano
2008-01-08 19:59 ` Nicolas Pitre
2008-01-08 20:13 ` Junio C Hamano
2008-01-08 20:44 ` Nicolas Pitre
2008-01-09 7:26 ` Johannes Sixt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4783A3B2.3060801@viscovery.net \
--to=j.sixt@viscovery.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).