>From 957251b78e43d0888cb5b9d02ebc68ab92ddf250 Mon Sep 17 00:00:00 2001 From: Balazs Scheidler Date: Tue, 31 Jan 2012 18:17:02 +0100 Subject: [PATCH 2/2] syslog() source: make buffer dynamically allocated This patch changes self->buffer to be dynamically allocated. Signed-off-by: Peter Eisenlohr Signed-off-by: Balazs Scheidler --- lib/logproto.c | 13 ++++++++++--- 1 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/logproto.c b/lib/logproto.c index 16ca0d7..11a44a6 100644 --- a/lib/logproto.c +++ b/lib/logproto.c @@ -1996,11 +1996,19 @@ log_proto_framed_server_fetch(LogProto *s, const guchar **msg, gsize *msg_len, G if (self->frame_len > self->max_msg_size) { msg_error("Incoming frame larger than log_msg_size()", - evt_tag_int("log_msg_size", self->buffer_size - LPFS_FRAME_BUFFER), + evt_tag_int("log_msg_size", self->max_msg_size), evt_tag_int("frame_length", self->frame_len), NULL); return LPS_ERROR; } + if (self->frame_len > self->buffer_size - LPFS_FRAME_BUFFER) + { + self->buffer_size = self->frame_len + LPFS_FRAME_BUFFER; + self->buffer = g_realloc(self->buffer, self->buffer_size); + msg_debug("Resizing input buffer", + evt_tag_int("new_size", self->buffer_size), + NULL); + } if (self->buffer_pos + self->frame_len > self->buffer_size) { /* message would be too large to fit into the buffer at @@ -2069,9 +2077,8 @@ log_proto_framed_server_new(LogTransport *transport, gint max_msg_size) self->super.convert = (GIConv) -1; /* max message + frame header */ self->max_msg_size = max_msg_size; - self->buffer_size = max_msg_size + LPFS_FRAME_BUFFER; + self->buffer_size = 1024 + LPFS_FRAME_BUFFER; self->buffer = g_malloc(self->buffer_size); self->half_message_in_buffer = FALSE; return &self->super; } - -- 1.7.2.5