Fix crash if layout blockdata size mismatches layout dimensions

This commit is contained in:
Diegoisawesome 2019-01-07 12:06:25 -06:00 committed by huderlem
parent fd58eb9dab
commit aa0709243d
5 changed files with 14 additions and 4 deletions

View file

@ -5,6 +5,7 @@
#include <QObject>
#include <QByteArray>
#include <QVector>
class Blockdata : public QObject
{
@ -16,7 +17,7 @@ public:
}
public:
QList<Block> *blocks = nullptr;
QVector<Block> *blocks = nullptr;
void addBlock(uint16_t);
void addBlock(Block);
QByteArray serialize();

View file

@ -1,6 +1,6 @@
#include "block.h"
Block::Block() {
Block::Block() : tile(0), collision(0), elevation(0) {
}
Block::Block(uint16_t word)

View file

@ -2,7 +2,7 @@
Blockdata::Blockdata(QObject *parent) : QObject(parent)
{
blocks = new QList<Block>;
blocks = new QVector<Block>;
}
void Blockdata::addBlock(uint16_t word) {

View file

@ -775,6 +775,15 @@ void Project::loadBlockdata(Map* map) {
QString path = QString("%1/%2").arg(root).arg(map->layout->blockdata_path);
map->layout->blockdata = readBlockdata(path);
if (map->layout->blockdata->blocks->count() != map->getWidth() * map->getHeight()) {
logWarn(QString("Layout blockdata length %1 does not match dimensions %2x%3 (should be %4). Resizing blockdata.")
.arg(map->layout->blockdata->blocks->count())
.arg(map->getWidth())
.arg(map->getHeight())
.arg(map->getWidth() * map->getHeight()));
map->layout->blockdata->blocks->resize(map->getWidth() * map->getHeight());
}
}
void Project::setNewMapBlockdata(Map* map) {

View file

@ -24,7 +24,7 @@ void BorderMetatilesPixmapItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
void BorderMetatilesPixmapItem::draw() {
QImage image(32, 32, QImage::Format_RGBA8888);
QPainter painter(&image);
QList<Block> *blocks = map->layout->border->blocks;
QVector<Block> *blocks = map->layout->border->blocks;
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {