From c55ab745bbc2bfb8ed0a7cdee7270e571143eb88 Mon Sep 17 00:00:00 2001 From: plule <630159+plule@users.noreply.github.com> Date: Sat, 10 Jun 2023 21:31:35 +0200 Subject: [PATCH] RemoteFortressReader: Fix a possible null pointer access on image descriptions --- docs/changelog.txt | 1 + plugins/remotefortressreader/item_reader.cpp | 7 +++++-- plugins/remotefortressreader/remotefortressreader.cpp | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/changelog.txt b/docs/changelog.txt index b15f5565e..903936676 100644 --- a/docs/changelog.txt +++ b/docs/changelog.txt @@ -37,6 +37,7 @@ changelog.txt uses a syntax similar to RST, with a few special sequences: ## Fixes - `dig-now`: clear item occupancy flags for channeled tiles that had items on them +- `RemoteFortressReader`: fix a crash with engraving without image ## Misc Improvements - `autonick`: additional nicknames based on burrowing animals, colours, gems and minerals added diff --git a/plugins/remotefortressreader/item_reader.cpp b/plugins/remotefortressreader/item_reader.cpp index c791852f3..9bcfcb781 100644 --- a/plugins/remotefortressreader/item_reader.cpp +++ b/plugins/remotefortressreader/item_reader.cpp @@ -248,7 +248,7 @@ void CopyItem(RemoteFortressReader::Item * NetItem, df::item * DfItem) chunk = world->art_image_chunks[i]; } } - if (chunk) + if (chunk && chunk->images[statue->image.subid]) { CopyImage(chunk->images[statue->image.subid], NetItem->mutable_image()); } @@ -462,7 +462,10 @@ void CopyItem(RemoteFortressReader::Item * NetItem, df::item * DfItem) case df::enums::improvement_type::ART_IMAGE: { VIRTUAL_CAST_VAR(artImage, df::itemimprovement_art_imagest, improvement); - CopyImage(artImage->getImage(DfItem), netImp->mutable_image()); + auto image = artImage->getImage(DfItem); + if (image) { + CopyImage(image, netImp->mutable_image()); + } break; } case df::enums::improvement_type::COVERED: diff --git a/plugins/remotefortressreader/remotefortressreader.cpp b/plugins/remotefortressreader/remotefortressreader.cpp index ec478c632..56d29371b 100644 --- a/plugins/remotefortressreader/remotefortressreader.cpp +++ b/plugins/remotefortressreader/remotefortressreader.cpp @@ -1530,7 +1530,9 @@ static command_result GetBlockList(color_ostream &stream, const BlockRequest *in ConvertDFCoord(engraving->pos, netEngraving->mutable_pos()); netEngraving->set_quality(engraving->quality); netEngraving->set_tile(engraving->tile); - CopyImage(chunk->images[engraving->art_subid], netEngraving->mutable_image()); + if (chunk->images[engraving->art_subid]) { + CopyImage(chunk->images[engraving->art_subid], netEngraving->mutable_image()); + } netEngraving->set_floor(engraving->flags.bits.floor); netEngraving->set_west(engraving->flags.bits.west); netEngraving->set_east(engraving->flags.bits.east);