diff options
author | Greg Daniel <egdaniel@google.com> | 2017-09-26 20:07:58 +0000 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-09-26 20:08:07 +0000 |
commit | f46633f8af5296341e33ec4cdb69c71dfa997396 (patch) | |
tree | d6d59760f023f6855d921253d684716ae93bdc28 /src/codec | |
parent | 58e23039bd4a8aee2c67fa6c9e5105b925d2e561 (diff) |
Revert "guard old apis for querying byte-size of a bitmap/imageinfo/pixmap"
This reverts commit 98a6216b18b57c2f7a0d58f542c60503686aed69.
Reason for revert: breaking the chrome roll. Looks like they may be writing data to create an image across all the row bytes and thus writing to unalloced data on the last row. Link to example failing bot:
https://build.chromium.org/p/tryserver.chromium.win/builders/win_chromium_rel_ng/builds/539960
Original change's description:
> guard old apis for querying byte-size of a bitmap/imageinfo/pixmap
>
> Previously we had size_t and uint64_t variations.
>
> The new (simpler) API always..
> - returns size_t, or 0 if the calculation overflowed
> - returns the trimmed size (does not include rowBytes padding for the last row)
>
> Bug: skia:
> Change-Id: I05173e877918327c7b207d2f7f1ab0db36892e2e
> Reviewed-on: https://skia-review.googlesource.com/50980
> Commit-Queue: Mike Reed <reed@google.com>
> Reviewed-by: Florin Malita <fmalita@chromium.org>
> Reviewed-by: Leon Scroggins <scroggo@google.com>
TBR=mtklein@google.com,herb@google.com,scroggo@google.com,fmalita@chromium.org,reed@google.com
Change-Id: I726f6ab1b36b14979ba6f37105e0a469b3f0dbc0
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:
Reviewed-on: https://skia-review.googlesource.com/51262
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
Diffstat (limited to 'src/codec')
-rw-r--r-- | src/codec/SkIcoCodec.cpp | 2 | ||||
-rw-r--r-- | src/codec/SkSampler.cpp | 4 | ||||
-rw-r--r-- | src/codec/SkWebpCodec.cpp | 2 |
3 files changed, 4 insertions, 4 deletions
diff --git a/src/codec/SkIcoCodec.cpp b/src/codec/SkIcoCodec.cpp index da6d0c360c..74affe6709 100644 --- a/src/codec/SkIcoCodec.cpp +++ b/src/codec/SkIcoCodec.cpp @@ -173,7 +173,7 @@ std::unique_ptr<SkCodec> SkIcoCodec::MakeFromStream(std::unique_ptr<SkStream> st int maxIndex = 0; for (int i = 0; i < codecs->count(); i++) { SkImageInfo info = codecs->operator[](i)->getInfo(); - size_t size = info.computeMinByteSize(); + size_t size = info.getSafeSize(info.minRowBytes()); if (size > maxSize) { maxSize = size; diff --git a/src/codec/SkSampler.cpp b/src/codec/SkSampler.cpp index d18410be3b..c7d9a3ac23 100644 --- a/src/codec/SkSampler.cpp +++ b/src/codec/SkSampler.cpp @@ -14,8 +14,8 @@ void SkSampler::Fill(const SkImageInfo& info, void* dst, size_t rowBytes, uint64_t colorOrIndex, SkCodec::ZeroInitialized zeroInit) { SkASSERT(dst != nullptr); - // Calculate bytes to fill. - const size_t bytesToFill = info.computeByteSize(rowBytes); + // Calculate bytes to fill. We use getSafeSize since the last row may not be padded. + const size_t bytesToFill = info.getSafeSize(rowBytes); const int width = info.width(); const int numRows = info.height(); diff --git a/src/codec/SkWebpCodec.cpp b/src/codec/SkWebpCodec.cpp index 864fa96a1d..f7082de42a 100644 --- a/src/codec/SkWebpCodec.cpp +++ b/src/codec/SkWebpCodec.cpp @@ -542,7 +542,7 @@ SkCodec::Result SkWebpCodec::onGetPixels(const SkImageInfo& dstInfo, void* dst, config.output.u.RGBA.rgba = reinterpret_cast<uint8_t*>(webpDst.getAddr(dstX, dstY)); config.output.u.RGBA.stride = static_cast<int>(webpDst.rowBytes()); - config.output.u.RGBA.size = webpDst.computeByteSize(); + config.output.u.RGBA.size = webpDst.getSafeSize(); SkAutoTCallVProc<WebPIDecoder, WebPIDelete> idec(WebPIDecode(nullptr, 0, &config)); if (!idec) { |