From 1e02d5d5b59556703223d43908feccb2bffb421c Mon Sep 17 00:00:00 2001 From: Jon Siwek Date: Thu, 11 Sep 2014 12:25:43 -0500 Subject: [PATCH] Fix file analysis placement of data after gap in HTTP Content-Range. Addresses BIT-1248. --- src/analyzer/protocol/http/HTTP.cc | 3 +++ .../extract_files.thefile | Bin 0 -> 30354 bytes .../btest/Traces/http/content-range-gap.trace | Bin 0 -> 11710 bytes .../base/protocols/http/content-range-gap.bro | 8 ++++++++ 4 files changed, 11 insertions(+) create mode 100644 testing/btest/Baseline/scripts.base.protocols.http.content-range-gap/extract_files.thefile create mode 100644 testing/btest/Traces/http/content-range-gap.trace create mode 100644 testing/btest/scripts/base/protocols/http/content-range-gap.bro diff --git a/src/analyzer/protocol/http/HTTP.cc b/src/analyzer/protocol/http/HTTP.cc index 744a0aac76..0009db0e55 100644 --- a/src/analyzer/protocol/http/HTTP.cc +++ b/src/analyzer/protocol/http/HTTP.cc @@ -243,10 +243,13 @@ int HTTP_Entity::Undelivered(int64_t len) return 0; if ( is_partial_content ) + { precomputed_file_id = file_mgr->Gap(body_length, len, http_message->MyHTTP_Analyzer()->GetAnalyzerTag(), http_message->MyHTTP_Analyzer()->Conn(), http_message->IsOrig(), precomputed_file_id); + offset += len; + } else precomputed_file_id = file_mgr->Gap(body_length, len, http_message->MyHTTP_Analyzer()->GetAnalyzerTag(), diff --git a/testing/btest/Baseline/scripts.base.protocols.http.content-range-gap/extract_files.thefile b/testing/btest/Baseline/scripts.base.protocols.http.content-range-gap/extract_files.thefile new file mode 100644 index 0000000000000000000000000000000000000000..fc6cc2271fcae2b16af6f89713eb82f41ac08104 GIT binary patch literal 30354 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
30D@ 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