[nostalgia/core/studio/tilesheeteditor] Fix access overflow on out of bounds Fill command
All checks were successful
Build / build (push) Successful in 2m51s
All checks were successful
Build / build (push) Successful in 2m51s
This commit is contained in:
parent
345fb03857
commit
ed910c0beb
@ -190,16 +190,16 @@ void TileSheetEditorModel::setActiveSubsheet(TileSheet::SubSheetIdx const&idx) n
|
|||||||
}
|
}
|
||||||
|
|
||||||
void TileSheetEditorModel::fill(ox::Point const&pt, int palIdx) noexcept {
|
void TileSheetEditorModel::fill(ox::Point const&pt, int palIdx) noexcept {
|
||||||
const auto &s = getSubSheet(m_img, m_activeSubsSheetIdx);
|
auto const&activeSubSheet = getSubSheet(m_img, m_activeSubsSheetIdx);
|
||||||
// build idx list
|
// build idx list
|
||||||
ox::Array<bool, PixelsPerTile> updateMap = {};
|
if (pt.x >= activeSubSheet.columns * TileWidth || pt.y >= activeSubSheet.rows * TileHeight) {
|
||||||
const auto oldColor = getPixel(s, m_img.bpp, pt);
|
|
||||||
if (pt.x >= s.columns * TileWidth || pt.y >= s.rows * TileHeight) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
ox::Array<bool, PixelsPerTile> updateMap = {};
|
||||||
|
auto const oldColor = getPixel(activeSubSheet, m_img.bpp, pt);
|
||||||
getFillPixels(updateMap, pt, oldColor);
|
getFillPixels(updateMap, pt, oldColor);
|
||||||
ox::Vector<std::size_t> idxList;
|
ox::Vector<std::size_t> idxList;
|
||||||
auto i = core::idx(s, pt) / PixelsPerTile * PixelsPerTile;
|
auto i = core::idx(activeSubSheet, pt) / PixelsPerTile * PixelsPerTile;
|
||||||
for (auto u : updateMap) {
|
for (auto u : updateMap) {
|
||||||
if (u) {
|
if (u) {
|
||||||
idxList.emplace_back(i);
|
idxList.emplace_back(i);
|
||||||
@ -209,7 +209,7 @@ void TileSheetEditorModel::fill(ox::Point const&pt, int palIdx) noexcept {
|
|||||||
// do updates to sheet
|
// do updates to sheet
|
||||||
if (m_ongoingDrawCommand) {
|
if (m_ongoingDrawCommand) {
|
||||||
m_updated = m_updated || m_ongoingDrawCommand->append(idxList);
|
m_updated = m_updated || m_ongoingDrawCommand->append(idxList);
|
||||||
} else if (getPixel(s, m_img.bpp, pt) != palIdx) {
|
} else if (getPixel(activeSubSheet, m_img.bpp, pt) != palIdx) {
|
||||||
pushCommand(ox::make<DrawCommand>(m_img, m_activeSubsSheetIdx, idxList, palIdx));
|
pushCommand(ox::make<DrawCommand>(m_img, m_activeSubsSheetIdx, idxList, palIdx));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user