From 1ac328b553df550c25bd0000e190d4cdd7c54a08 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Mon, 9 Feb 2009 16:36:11 +0100 Subject: shout: clear buffer before calling the encoder Always assume the buffer is empty before calling the encoder. Always flush the buffer immediately after there has been added something. This reduces the risk of buffer overruns, because there will never be a "rest" in the current buffer. --- src/output/shout_ogg.c | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) (limited to 'src/output/shout_ogg.c') diff --git a/src/output/shout_ogg.c b/src/output/shout_ogg.c index d5766d0a3..ebf84c0bf 100644 --- a/src/output/shout_ogg.c +++ b/src/output/shout_ogg.c @@ -75,23 +75,14 @@ static void copy_tag_to_vorbis_comment(struct shout_data *sd) static int copy_ogg_buffer_to_shout_buffer(ogg_page *og, struct shout_buffer *buf) { - if (sizeof(buf->data) - buf->len >= (size_t)og->header_len) { - memcpy(buf->data + buf->len, - og->header, og->header_len); - buf->len += og->header_len; - } else { + if ((size_t)og->header_len + (size_t)og->body_len > sizeof(buf->data)) { g_warning("%s: not enough buffer space!\n", __func__); return -1; } - if (sizeof(buf->data) - buf->len >= (size_t)og->body_len) { - memcpy(buf->data + buf->len, - og->body, og->body_len); - buf->len += og->body_len; - } else { - g_warning("%s: not enough buffer space!\n", __func__); - return -1; - } + memcpy(buf->data, og->header, og->header_len); + memcpy(buf->data + og->header_len, og->body, og->body_len); + buf->len = og->header_len + og->body_len; return 0; } -- cgit v1.2.3