From 7c51f50d76f33bdfe1918e81bb600bc6467d5f97 Mon Sep 17 00:00:00 2001
From: Diegoisawesome <diego@domoreaweso.me>
Date: Sun, 6 Jan 2019 12:31:58 -0600
Subject: [PATCH] Fix segfault when using magic fill outside map

---
 src/ui/mappixmapitem.cpp | 33 ++++++++++++++++++---------------
 1 file changed, 18 insertions(+), 15 deletions(-)

diff --git a/src/ui/mappixmapitem.cpp b/src/ui/mappixmapitem.cpp
index d96c7f61..9bbf254a 100644
--- a/src/ui/mappixmapitem.cpp
+++ b/src/ui/mappixmapitem.cpp
@@ -260,22 +260,25 @@ void MapPixmapItem::magicFill(QGraphicsSceneMouseEvent *event) {
             int initialX = static_cast<int>(pos.x()) / 16;
             int initialY = static_cast<int>(pos.y()) / 16;
             Block *block = map->getBlock(initialX, initialY);
-            QList<uint16_t> *selectedMetatiles = this->metatileSelector->getSelectedMetatiles();
-            QPoint selectionDimensions = this->metatileSelector->getSelectionDimensions();
-            uint16_t tile = block->tile;
 
-            for (int y = 0; y < map->getHeight(); y++) {
-                for (int x = 0; x < map->getWidth(); x++) {
-                    block = map->getBlock(x, y);
-                    if (block && block->tile == tile) {
-                        int xDiff = x - initialX;
-                        int yDiff = y - initialY;
-                        int i = xDiff % selectionDimensions.x();
-                        int j = yDiff % selectionDimensions.y();
-                        if (i < 0) i = selectionDimensions.x() + i;
-                        if (j < 0) j = selectionDimensions.y() + j;
-                        block->tile = selectedMetatiles->at(j * selectionDimensions.x() + i);
-                        map->_setBlock(x, y, *block);
+            if (block) {
+                QList<uint16_t> *selectedMetatiles = this->metatileSelector->getSelectedMetatiles();
+                QPoint selectionDimensions = this->metatileSelector->getSelectionDimensions();
+                uint16_t tile = block->tile;
+
+                for (int y = 0; y < map->getHeight(); y++) {
+                    for (int x = 0; x < map->getWidth(); x++) {
+                        block = map->getBlock(x, y);
+                        if (block && block->tile == tile) {
+                            int xDiff = x - initialX;
+                            int yDiff = y - initialY;
+                            int i = xDiff % selectionDimensions.x();
+                            int j = yDiff % selectionDimensions.y();
+                            if (i < 0) i = selectionDimensions.x() + i;
+                            if (j < 0) j = selectionDimensions.y() + j;
+                            block->tile = selectedMetatiles->at(j * selectionDimensions.x() + i);
+                            map->_setBlock(x, y, *block);
+                        }
                     }
                 }
             }