diff options
Diffstat (limited to 'src/io/stream_reader.cpp')
| -rw-r--r-- | src/io/stream_reader.cpp | 5 |
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; } |
