streaming: remove BUG_ON and other improvements

Can be triggered by memory limits.
pull/2673/head
Victor Julien 10 years ago
parent d789dc7e6d
commit 3fa2e8689c

@ -728,7 +728,9 @@ int StreamingBufferInsertAt(StreamingBuffer *sb, StreamingBufferSegment *seg,
return -1; 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); memcpy(sb->buf + rel_offset, data, data_len);
seg->stream_offset = offset; seg->stream_offset = offset;
@ -846,20 +848,22 @@ void StreamingBufferSegmentGetData(const StreamingBuffer *sb,
const StreamingBufferSegment *seg, const StreamingBufferSegment *seg,
const uint8_t **data, uint32_t *data_len) const uint8_t **data, uint32_t *data_len)
{ {
if (seg->stream_offset >= sb->stream_offset) { if (likely(sb->buf)) {
uint64_t offset = seg->stream_offset - sb->stream_offset; if (seg->stream_offset >= sb->stream_offset) {
*data = sb->buf + offset; uint64_t offset = seg->stream_offset - sb->stream_offset;
if (offset + seg->segment_len > sb->buf_size) *data = sb->buf + offset;
*data_len = sb->buf_size - offset; if (offset + seg->segment_len > sb->buf_size)
else *data_len = sb->buf_size - offset;
*data_len = seg->segment_len; else
return; *data_len = seg->segment_len;
} 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; 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; *data = NULL;
@ -942,7 +946,10 @@ int StreamingBufferCompareRawData(const StreamingBuffer *sb,
return 1; return 1;
} }
SCLogDebug("sbdata_len %u, offset %u", sbdata_len, (uint)offset); 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; return 0;
} }

Loading…
Cancel
Save