From f7a87af0fded70c75fa78785f014a04b183929b6 Mon Sep 17 00:00:00 2001 From: David Capello Date: Mon, 10 Jan 2022 15:59:36 -0300 Subject: [PATCH 1/3] Fix crash using Shift+click on Pencil tool (cherry-picked from ab3bf31c6a0e791befeb030bb01373114f86faec) --- src/app/ui/editor/delayed_mouse_move.cpp | 5 +++++ src/app/ui/editor/delayed_mouse_move.h | 5 +++++ src/app/ui/editor/drawing_state.cpp | 5 ++++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/app/ui/editor/delayed_mouse_move.cpp b/src/app/ui/editor/delayed_mouse_move.cpp index ca0a5d860..d9c44bbc8 100644 --- a/src/app/ui/editor/delayed_mouse_move.cpp +++ b/src/app/ui/editor/delayed_mouse_move.cpp @@ -27,6 +27,11 @@ DelayedMouseMove::DelayedMouseMove(DelayedMouseMoveDelegate* delegate, m_timer.Tick.connect([this] { commitMouseMove(); }); } +void DelayedMouseMove::initSpritePos(const gfx::PointF& pos) +{ + m_spritePos = pos; +} + void DelayedMouseMove::onMouseDown(const ui::MouseMessage* msg) { updateSpritePos(msg); diff --git a/src/app/ui/editor/delayed_mouse_move.h b/src/app/ui/editor/delayed_mouse_move.h index f1b91ccc2..31dddc486 100644 --- a/src/app/ui/editor/delayed_mouse_move.h +++ b/src/app/ui/editor/delayed_mouse_move.h @@ -41,6 +41,11 @@ namespace app { Editor* editor, const int interval); + // In case the event wasn't started with onMouseDown() we can + // initialize the sprite position directly (e.g. starting a line + // from last painted point with Shift+click with Pencil tool). + void initSpritePos(const gfx::PointF& pos); + void onMouseDown(const ui::MouseMessage* msg); bool onMouseMove(const ui::MouseMessage* msg); void onMouseUp(const ui::MouseMessage* msg); diff --git a/src/app/ui/editor/drawing_state.cpp b/src/app/ui/editor/drawing_state.cpp index b1892e700..5c239d5be 100644 --- a/src/app/ui/editor/drawing_state.cpp +++ b/src/app/ui/editor/drawing_state.cpp @@ -83,7 +83,10 @@ void DrawingState::initToolLoop(Editor* editor, const ui::MouseMessage* msg, const tools::Pointer& pointer) { - m_delayedMouseMove.onMouseDown(msg); + if (msg) + m_delayedMouseMove.onMouseDown(msg); + else + m_delayedMouseMove.initSpritePos(gfx::PointF(pointer.point())); // Prepare preview image (the destination image will be our preview // in the tool-loop time, so we can see what we are drawing) From 817879d7009cca71b7049ec00517482fa72626dc Mon Sep 17 00:00:00 2001 From: David Capello Date: Mon, 10 Jan 2022 17:00:12 -0300 Subject: [PATCH 2/3] Fix possible infinite loop reading broken .aseprite files (fix #3123) --- src/dio/aseprite_decoder.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/dio/aseprite_decoder.cpp b/src/dio/aseprite_decoder.cpp index 56547a2b4..613aad4ce 100644 --- a/src/dio/aseprite_decoder.cpp +++ b/src/dio/aseprite_decoder.cpp @@ -1,5 +1,5 @@ // Aseprite Document IO Library -// Copyright (c) 2018-2021 Igara Studio S.A. +// Copyright (c) 2018-2022 Igara Studio S.A. // Copyright (c) 2001-2018 David Capello // // This file is released under the terms of the MIT license. @@ -527,8 +527,8 @@ template void read_compressed_image(FileInterface* f, DecodeDelegate* delegate, doc::Image* image, - size_t chunk_end, - AsepriteHeader* header) + const size_t chunk_end, + const AsepriteHeader* header) { PixelIO pixel_io; z_stream zstream; @@ -561,6 +561,16 @@ void read_compressed_image(FileInterface* f, input_bytes = compressed.size(); size_t bytes_read = f->readBytes(&compressed[0], input_bytes); + + // Error reading "input_bytes" bytes, broken file? chunk without + // enough compressed data? + if (bytes_read == 0) { + delegate->error( + fmt::format("Error reading {} bytes of compressed data", + input_bytes)); + break; + } + zstream.next_in = (Bytef*)&compressed[0]; zstream.avail_in = bytes_read; From 8a9206a757cca7ffba8a59d9cd697373e757e238 Mon Sep 17 00:00:00 2001 From: David Capello Date: Mon, 10 Jan 2022 17:00:58 -0300 Subject: [PATCH 3/3] Update laf module --- laf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/laf b/laf index 56b72b6b0..a6e51dcc1 160000 --- a/laf +++ b/laf @@ -1 +1 @@ -Subproject commit 56b72b6b03f8411115c4bd201b6896340eee08e1 +Subproject commit a6e51dcc134e42e27ce96b0b634de28599ab49b3