summaryrefslogtreecommitdiffstats
path: root/net/filter
diff options
context:
space:
mode:
authoreustas <eustas@chromium.org>2016-01-21 04:30:56 -0800
committerCommit bot <commit-bot@chromium.org>2016-01-21 12:32:01 +0000
commitb266c8153a66f01644f3361fe9cc7d439df1e981 (patch)
tree18fc1577256168aa25e1c9efb03b33491029531e /net/filter
parentd2535dca624b5531247dbcbc2048dded6e9c45fc (diff)
downloadchromium_src-b266c8153a66f01644f3361fe9cc7d439df1e981.zip
chromium_src-b266c8153a66f01644f3361fe9cc7d439df1e981.tar.gz
chromium_src-b266c8153a66f01644f3361fe9cc7d439df1e981.tar.bz2
Fix division by zero. Test filter with empty output.
BUG=579672 Review URL: https://codereview.chromium.org/1616863002 Cr-Commit-Position: refs/heads/master@{#370675}
Diffstat (limited to 'net/filter')
-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