summaryrefslogtreecommitdiff
path: root/src/io/stream_reader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/io/stream_reader.cpp')
-rw-r--r--src/io/stream_reader.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/io/stream_reader.cpp b/src/io/stream_reader.cpp
index f6f30a5b49..28c1e1d89f 100644
--- a/src/io/stream_reader.cpp
+++ b/src/io/stream_reader.cpp
@@ -27,6 +27,8 @@ namespace nbt
namespace io
{
+static constexpr int MAX_DEPTH = 1024;
+
std::pair<std::string, std::unique_ptr<tag_compound>> read_compound(std::istream& is, endian::endian e)
{
return stream_reader(is, e).read_compound();
@@ -74,8 +76,11 @@ std::pair<std::string, std::unique_ptr<tag>> stream_reader::read_tag()
std::unique_ptr<tag> stream_reader::read_payload(tag_type type)
{
+ if (++depth > MAX_DEPTH)
+ throw input_error("Too deeply nested");
std::unique_ptr<tag> t = tag::create(type);
t->read_payload(*this);
+ --depth;
return t;
}