From: Victor Julien Date: Tue, 25 Apr 2023 13:05:08 +0000 (+0200) Subject: streaming: improve error handling X-Git-Tag: suricata-7.0.0-rc2~337 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c1714294cb77117948947a30e02edd08748addbb;p=thirdparty%2Fsuricata.git streaming: improve error handling --- diff --git a/src/util-streaming-buffer.c b/src/util-streaming-buffer.c index e23e26f2bc..6d45e38603 100644 --- a/src/util-streaming-buffer.c +++ b/src/util-streaming-buffer.c @@ -218,26 +218,29 @@ static int WARN_UNUSED SBBInit(StreamingBuffer *sb, const StreamingBufferConfig } sbb->offset = sb->region.stream_offset; sbb->len = sb->region.buf_offset; + (void)SBB_RB_INSERT(&sb->sbb_tree, sbb); + sb->head = sbb; + sb->sbb_size = sbb->len; StreamingBufferBlock *sbb2 = CALLOC(cfg, 1, sizeof(*sbb2)); if (sbb2 == NULL) { - FREE(cfg, sbb, sizeof(*sbb)); return -1; } sbb2->offset = region->stream_offset + rel_offset; sbb2->len = data_len; - - sb->head = sbb; - sb->sbb_size = sbb->len + sbb2->len; - SBB_RB_INSERT(&sb->sbb_tree, sbb); - SBB_RB_INSERT(&sb->sbb_tree, sbb2); - + DEBUG_VALIDATE_BUG_ON(sbb2->offset < sbb->len); SCLogDebug("sbb1 %" PRIu64 ", len %u, sbb2 %" PRIu64 ", len %u", sbb->offset, sbb->len, sbb2->offset, sbb2->len); + + sb->sbb_size += sbb2->len; + if (SBB_RB_INSERT(&sb->sbb_tree, sbb2) != NULL) { + FREE(cfg, sbb2, sizeof(*sbb2)); + return -1; + } + #ifdef DEBUG SBBPrintList(sb); #endif - BUG_ON(sbb2->offset < sbb->len); return 0; } @@ -258,7 +261,7 @@ static int WARN_UNUSED SBBInitLeadingGap(StreamingBuffer *sb, const StreamingBuf sb->head = sbb; sb->sbb_size = sbb->len; - SBB_RB_INSERT(&sb->sbb_tree, sbb); + (void)SBB_RB_INSERT(&sb->sbb_tree, sbb); SCLogDebug("sbb %" PRIu64 ", len %u", sbb->offset, sbb->len); #ifdef DEBUG