Commit 56fa2d6b authored by Sasha McIntosh's avatar Sasha McIntosh Committed by Commit Bot

Prevent DCHCEK crash in jpeg image decoder.

Additionally disable YUV decoding when
ImageBitmap::GetSkImageFromDecoder is called, as the bitmap is soon
after requesed from the SkImage.

Bug: 1041307
Change-Id: I0cdbfd4188d4c44453bab8ea49b199d32235ef07
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1998973Reviewed-by: default avatarStephen Chenney <schenney@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Commit-Queue: Sasha McIntosh <sashamcintosh@chromium.org>
Cr-Commit-Position: refs/heads/master@{#735546}
parent 88fd72c5
...@@ -607,7 +607,8 @@ ImageBitmap::ImageBitmap(ImageElementBase* image, ...@@ -607,7 +607,8 @@ ImageBitmap::ImageBitmap(ImageElementBase* image,
: ImageDecoder::kAlphaNotPremultiplied, : ImageDecoder::kAlphaNotPremultiplied,
ImageDecoder::kDefaultBitDepth, ImageDecoder::kDefaultBitDepth,
parsed_options.has_color_space_conversion ? ColorBehavior::Tag() parsed_options.has_color_space_conversion ? ColorBehavior::Tag()
: ColorBehavior::Ignore())); : ColorBehavior::Ignore(),
ImageDecoder::OverrideAllowDecodeToYuv::kDeny));
if (!decoder) if (!decoder)
return; return;
skia_image = ImageBitmap::GetSkImageFromDecoder(std::move(decoder)); skia_image = ImageBitmap::GetSkImageFromDecoder(std::move(decoder));
......
...@@ -321,7 +321,7 @@ void DecodeImageOnDecoderThread( ...@@ -321,7 +321,7 @@ void DecodeImageOnDecoderThread(
SegmentReader::CreateFromSkData( SegmentReader::CreateFromSkData(
SkData::MakeWithoutCopy(contents.Data(), contents.DataLength())), SkData::MakeWithoutCopy(contents.Data(), contents.DataLength())),
data_complete, alpha_option, ImageDecoder::kDefaultBitDepth, data_complete, alpha_option, ImageDecoder::kDefaultBitDepth,
color_behavior); color_behavior, ImageDecoder::OverrideAllowDecodeToYuv::kDeny);
sk_sp<SkImage> frame; sk_sp<SkImage> frame;
if (decoder) { if (decoder) {
frame = ImageBitmap::GetSkImageFromDecoder(std::move(decoder)); frame = ImageBitmap::GetSkImageFromDecoder(std::move(decoder));
......
...@@ -39,7 +39,7 @@ class ClipboardImageWriter final : public ClipboardWriter { ...@@ -39,7 +39,7 @@ class ClipboardImageWriter final : public ClipboardWriter {
SegmentReader::CreateFromSkData(SkData::MakeWithoutCopy( SegmentReader::CreateFromSkData(SkData::MakeWithoutCopy(
png_data->Data(), png_data->ByteLengthAsSizeT())), png_data->Data(), png_data->ByteLengthAsSizeT())),
true, ImageDecoder::kAlphaPremultiplied, ImageDecoder::kDefaultBitDepth, true, ImageDecoder::kAlphaPremultiplied, ImageDecoder::kDefaultBitDepth,
ColorBehavior::Tag()); ColorBehavior::Tag(), ImageDecoder::OverrideAllowDecodeToYuv::kDeny);
sk_sp<SkImage> image = nullptr; sk_sp<SkImage> image = nullptr;
// |decoder| is nullptr if |png_data| doesn't begin with the PNG signature. // |decoder| is nullptr if |png_data| doesn't begin with the PNG signature.
if (decoder) if (decoder)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment