summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/filter/brotli_filter.cc9
-rw-r--r--net/filter/brotli_filter_unittest.cc16
2 files changed, 22 insertions, 3 deletions
diff --git a/net/filter/brotli_filter.cc b/net/filter/brotli_filter.cc
index 91ff257..7ce402ec 100644
--- a/net/filter/brotli_filter.cc
+++ b/net/filter/brotli_filter.cc
@@ -41,9 +41,12 @@ class BrotliFilter : public Filter {
"BrotliFilter.Status", static_cast<int>(decoding_status_),
static_cast<int>(DecodingStatus::DECODING_STATUS_COUNT));
if (decoding_status_ == DecodingStatus::DECODING_DONE) {
- UMA_HISTOGRAM_PERCENTAGE(
- "BrotliFilter.CompressionPercent",
- static_cast<int>((consumed_bytes_ * 100) / produced_bytes_));
+ // CompressionPercent is undefined when there is no output produced.
+ if (produced_bytes_ != 0) {
+ UMA_HISTOGRAM_PERCENTAGE(
+ "BrotliFilter.CompressionPercent",
+ static_cast<int>((consumed_bytes_ * 100) / produced_bytes_));
+ }
}
// All code here is for gathering stats, and can be removed when
diff --git a/net/filter/brotli_filter_unittest.cc b/net/filter/brotli_filter_unittest.cc
index 9c9ce65..38cfc82 100644
--- a/net/filter/brotli_filter_unittest.cc
+++ b/net/filter/brotli_filter_unittest.cc
@@ -250,4 +250,20 @@ TEST_F(BrotliUnitTest, DecodeMissingData) {
EXPECT_EQ(Filter::FILTER_ERROR, code);
}
+// Decoding brotli stream with empty output data.
+TEST_F(BrotliUnitTest, DecodeEmptyData) {
+ char data[1] = {6}; // WBITS = 16, ISLAST = 1, ISLASTEMPTY = 1
+ int data_len = 1;
+
+ InitFilter();
+ char decode_buffer[kDefaultBufferSize];
+ int decode_size = kDefaultBufferSize;
+ int code = DecodeAllWithFilter(filter_.get(), data, data_len, decode_buffer,
+ &decode_size);
+
+ // Expect success / empty output.
+ EXPECT_EQ(Filter::FILTER_DONE, code);
+ EXPECT_EQ(0, decode_size);
+}
+
} // namespace net