Fix crash undoing the copy of cels from a deleted layer

This could happen when we copied a cel from another document, then
we closed that document, and undid the cmd::CopyCel in the destination
document.
This commit is contained in:
David Capello 2020-06-09 15:11:57 -03:00
parent d8bbbfdea3
commit b879fc855a
2 changed files with 9 additions and 5 deletions

View File

@ -1,5 +1,5 @@
// Aseprite
// Copyright (C) 2019 Igara Studio S.A.
// Copyright (C) 2019-2020 Igara Studio S.A.
// Copyright (C) 2001-2016 David Capello
//
// This program is distributed under the terms of
@ -125,7 +125,11 @@ void CopyCel::onFireNotifications()
{
CmdSequence::onFireNotifications();
ASSERT(m_srcLayer.layer());
// The m_srcLayer can be nullptr now because the layer from where we
// copied this cel might not exist anymore (e.g. if we copied the
// cel from another document that is already closed)
//ASSERT(m_srcLayer.layer());
ASSERT(m_dstLayer.layer());
static_cast<Doc*>(m_dstLayer.layer()->sprite()->document())

View File

@ -228,7 +228,7 @@ void Doc::notifyLayerMergedDown(Layer* srcLayer, Layer* targetLayer)
void Doc::notifyCelMoved(Layer* fromLayer, frame_t fromFrame, Layer* toLayer, frame_t toFrame)
{
DocEvent ev(this);
ev.sprite(fromLayer->sprite());
ev.sprite(toLayer->sprite());
ev.layer(fromLayer);
ev.frame(fromFrame);
ev.targetLayer(toLayer);
@ -239,8 +239,8 @@ void Doc::notifyCelMoved(Layer* fromLayer, frame_t fromFrame, Layer* toLayer, fr
void Doc::notifyCelCopied(Layer* fromLayer, frame_t fromFrame, Layer* toLayer, frame_t toFrame)
{
DocEvent ev(this);
ev.sprite(fromLayer->sprite());
ev.layer(fromLayer);
ev.sprite(toLayer->sprite());
ev.layer(fromLayer); // From layer can be nullptr
ev.frame(fromFrame);
ev.targetLayer(toLayer);
ev.targetFrame(toFrame);