Commit b3cb7ce6 authored by Vladimir Levin's avatar Vladimir Levin Committed by Commit Bot

Fix nullptr deref when Unaliasing an effect node.

My previous patch missed one spot where we can unalias a node which
is actually null. This patch fixes up that spot.

R=pdr@chromium.org, chrishtr@chromium.org

Bug: 884081, 884083, 884084, 884186
Cq-Include-Trybots: luci.chromium.try:linux_layout_tests_slimming_paint_v2;master.tryserver.blink:linux_trusty_blink_rel
Change-Id: Ic12a21c429c4984cb18f92f6beac8c18c0f51f87
Reviewed-on: https://chromium-review.googlesource.com/1227147Reviewed-by: default avatarPhilip Rogers <pdr@chromium.org>
Reviewed-by: default avatarvmpstr <vmpstr@chromium.org>
Commit-Queue: vmpstr <vmpstr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#591444}
parent 9592222b
...@@ -37,7 +37,7 @@ void ChunkToLayerMapper::SwitchToChunk(const PaintChunk& chunk) { ...@@ -37,7 +37,7 @@ void ChunkToLayerMapper::SwitchToChunk(const PaintChunk& chunk) {
new_has_filter_that_moves_pixels = false; new_has_filter_that_moves_pixels = false;
for (const auto* effect = new_chunk_state.Effect(); for (const auto* effect = new_chunk_state.Effect();
effect && effect != layer_state_.Effect(); effect && effect != layer_state_.Effect();
effect = effect->Parent()->Unalias()) { effect = effect->Parent() ? effect->Parent()->Unalias() : nullptr) {
if (effect->HasFilterThatMovesPixels()) { if (effect->HasFilterThatMovesPixels()) {
new_has_filter_that_moves_pixels = true; new_has_filter_that_moves_pixels = true;
break; break;
......
...@@ -224,4 +224,18 @@ TEST_F(ChunkToLayerMapperTest, SlowPath) { ...@@ -224,4 +224,18 @@ TEST_F(ChunkToLayerMapperTest, SlowPath) {
EXPECT_EQ(FloatClipRect(), mapper.ClipRect()); EXPECT_EQ(FloatClipRect(), mapper.ClipRect());
} }
TEST_F(ChunkToLayerMapperTest, SwitchToSiblingEffect) {
auto effect1 = CreateOpacityEffect(*LayerState().Effect(), 0.5f);
auto chunk1 = Chunk(PropertyTreeState(LayerState().Transform(),
LayerState().Clip(), effect1.get()));
auto effect2 = CreateOpacityEffect(*LayerState().Effect(), 0.5f);
auto chunk2 = Chunk(PropertyTreeState(LayerState().Transform(),
LayerState().Clip(), effect2.get()));
ChunkToLayerMapper mapper(chunk1.properties.GetPropertyTreeState(),
gfx::Vector2dF(10, 20));
mapper.SwitchToChunk(chunk2);
EXPECT_FALSE(HasFilterThatMovesPixels(mapper));
}
} // namespace blink } // namespace blink
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