From 3fa2e8689cb86d7d6aae94aead2da7c3ffbd3194 Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Fri, 6 May 2016 19:45:11 +0200 Subject: [PATCH] streaming: remove BUG_ON and other improvements Can be triggered by memory limits. --- src/util-streaming-buffer.c | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/src/util-streaming-buffer.c b/src/util-streaming-buffer.c index fdfcd42e34..760fa775fb 100644 --- a/src/util-streaming-buffer.c +++ b/src/util-streaming-buffer.c @@ -728,7 +728,9 @@ int StreamingBufferInsertAt(StreamingBuffer *sb, StreamingBufferSegment *seg, return -1; } } - BUG_ON(!DATA_FITS_AT_OFFSET(sb, data_len, rel_offset)); + if (!DATA_FITS_AT_OFFSET(sb, data_len, rel_offset)) { + return -1; + } memcpy(sb->buf + rel_offset, data, data_len); seg->stream_offset = offset; @@ -846,20 +848,22 @@ void StreamingBufferSegmentGetData(const StreamingBuffer *sb, const StreamingBufferSegment *seg, const uint8_t **data, uint32_t *data_len) { - if (seg->stream_offset >= sb->stream_offset) { - uint64_t offset = seg->stream_offset - sb->stream_offset; - *data = sb->buf + offset; - if (offset + seg->segment_len > sb->buf_size) - *data_len = sb->buf_size - offset; - else - *data_len = seg->segment_len; - return; - } else { - uint64_t offset = sb->stream_offset - seg->stream_offset; - if (offset < seg->segment_len) { - *data = sb->buf; - *data_len = seg->segment_len - offset; + if (likely(sb->buf)) { + if (seg->stream_offset >= sb->stream_offset) { + uint64_t offset = seg->stream_offset - sb->stream_offset; + *data = sb->buf + offset; + if (offset + seg->segment_len > sb->buf_size) + *data_len = sb->buf_size - offset; + else + *data_len = seg->segment_len; return; + } else { + uint64_t offset = sb->stream_offset - seg->stream_offset; + if (offset < seg->segment_len) { + *data = sb->buf; + *data_len = seg->segment_len - offset; + return; + } } } *data = NULL; @@ -942,7 +946,10 @@ int StreamingBufferCompareRawData(const StreamingBuffer *sb, return 1; } SCLogDebug("sbdata_len %u, offset %u", sbdata_len, (uint)offset); - //PrintRawDataFp(stdout, sbdata,sbdata_len); + printf("got:\n"); + PrintRawDataFp(stdout, sbdata,sbdata_len); + printf("wanted:\n"); + PrintRawDataFp(stdout, rawdata,rawdata_len); return 0; } -- 2.47.2