diff options
author | eustas <eustas@chromium.org> | 2016-01-21 04:30:56 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-01-21 12:32:01 +0000 |
commit | b266c8153a66f01644f3361fe9cc7d439df1e981 (patch) | |
tree | 18fc1577256168aa25e1c9efb03b33491029531e /net/filter | |
parent | d2535dca624b5531247dbcbc2048dded6e9c45fc (diff) | |
download | chromium_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.cc | 9 | ||||
-rw-r--r-- | net/filter/brotli_filter_unittest.cc | 16 |
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 |