From: Johannes Sixt Date: Tue, 08 Jan 2008 16:24:18 GMT Subject: [PATCH 1/2] sideband.c: Use xmalloc() instead of variable-sized arrays. Message-ID: <4783A3B2.3060801@viscovery.net> From: Johannes Sixt 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 --- 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