From: Johannes Sixt <johannes.sixt@xxxxxxxxxx> 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@xxxxxxxxxx> --- 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 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html