]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
streaming: remove BUG_ON and other improvements
authorVictor Julien <victor@inliniac.net>
Fri, 6 May 2016 17:45:11 +0000 (19:45 +0200)
committerVictor Julien <victor@inliniac.net>
Thu, 20 Apr 2017 15:41:11 +0000 (17:41 +0200)
Can be triggered by memory limits.

src/util-streaming-buffer.c

index fdfcd42e34e2978d7acf3d08b4f639b3587d7f8d..760fa775fbeadc60f6cab45c6d68e4ce7b0d0c43 100644 (file)
@@ -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;
 }