summaryrefslogtreecommitdiff
path: root/src/nodedef.cpp
diff options
context:
space:
mode:
authorSmallJoker <SmallJoker@users.noreply.github.com>2021-03-20 13:02:15 +0100
committerGitHub <noreply@github.com>2021-03-20 13:02:15 +0100
commit05719913aca97e53ff5b1dde49e1a033a327551f (patch)
treee775880bc19a4fd53f3b85362c6dc49edb8d4453 /src/nodedef.cpp
parenta8cc3bdb0890c89d600ef6543c5e9b1b55bcf2b6 (diff)
downloadminetest-05719913aca97e53ff5b1dde49e1a033a327551f.tar.gz
minetest-05719913aca97e53ff5b1dde49e1a033a327551f.tar.bz2
minetest-05719913aca97e53ff5b1dde49e1a033a327551f.zip
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)
Diffstat (limited to 'src/nodedef.cpp')
-rw-r--r--src/nodedef.cpp16
1 files changed, 14 insertions, 2 deletions
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<content_t> *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);
+}