From 05719913aca97e53ff5b1dde49e1a033a327551f Mon Sep 17 00:00:00 2001 From: SmallJoker Date: Sat, 20 Mar 2021 13:02:15 +0100 Subject: Schematic: Properly deal with before/after node resolving and document (#11011) This fixes an out-of-bounds index access when the node resolver was already applied to the schematic (i.e. biome decoration). Also improves the handling of the two cases: prior node resolving (m_nodenames), and after node resolving (manual lookup) --- src/nodedef.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'src/nodedef.cpp') diff --git a/src/nodedef.cpp b/src/nodedef.cpp index 57d4c008f..8a1f6203b 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -1675,8 +1675,7 @@ bool NodeDefManager::nodeboxConnects(MapNode from, MapNode to, NodeResolver::NodeResolver() { - m_nodenames.reserve(16); - m_nnlistsizes.reserve(4); + reset(); } @@ -1779,3 +1778,16 @@ bool NodeResolver::getIdsFromNrBacklog(std::vector *result_out, return success; } + +void NodeResolver::reset(bool resolve_done) +{ + m_nodenames.clear(); + m_nodenames_idx = 0; + m_nnlistsizes.clear(); + m_nnlistsizes_idx = 0; + + m_resolve_done = resolve_done; + + m_nodenames.reserve(16); + m_nnlistsizes.reserve(4); +} -- cgit v1.2.3