diff --git a/lib/source/pl/core/ast/ast_node_array_variable_decl.cpp b/lib/source/pl/core/ast/ast_node_array_variable_decl.cpp index afd1fc8a..ebc4b70c 100644 --- a/lib/source/pl/core/ast/ast_node_array_variable_decl.cpp +++ b/lib/source/pl/core/ast/ast_node_array_variable_decl.cpp @@ -184,7 +184,7 @@ namespace pl::core::ast { } else if (auto whileStatement = dynamic_cast(sizeNode.get())) { while (whileStatement->evaluateCondition(evaluator)) { if (templatePattern->getSection() == ptrn::Pattern::MainSectionId) - if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize() + 1)) + if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize())) err::E0004.throwError("Array expanded past end of the data before termination condition was met.", { }, this->getLocation()); evaluator->handleAbort(); @@ -199,7 +199,7 @@ namespace pl::core::ast { std::vector buffer(templatePattern->getSize()); while (true) { if (templatePattern->getSection() == ptrn::Pattern::MainSectionId) - if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize() + 1)) + if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize())) err::E0004.throwError("Array expanded past end of the data before a null-entry was found.", "Try using a while-sized array instead to limit the size of the array.", this->getLocation()); evaluator->readData(evaluator->getReadOffset(), buffer.data(), buffer.size(), templatePattern->getSection()); @@ -246,7 +246,7 @@ namespace pl::core::ast { evaluator->setReadOffset(startOffset + outputPattern->getSize()); if (outputPattern->getSection() == ptrn::Pattern::MainSectionId) - if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize() + 1)) + if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize())) err::E0004.throwError("Array expanded past end of the data.", { }, this->getLocation()); } @@ -327,7 +327,7 @@ namespace pl::core::ast { size_t patternCount = patterns.size(); if (arrayPattern->getSection() == ptrn::Pattern::MainSectionId) - if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize() + 1)) + if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize())) err::E0004.throwError("Array expanded past end of the data.", fmt::format("Entry {} exceeded data by {} bytes.", i, evaluator->getReadOffset() - evaluator->getDataSize()), this->getLocation()); if (!patterns.empty()) @@ -360,7 +360,7 @@ namespace pl::core::ast { size_t patternCount = patterns.size(); if (arrayPattern->getSection() == ptrn::Pattern::MainSectionId) - if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize() + 1)) + if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize())) err::E0004.throwError("Array expanded past end of the data before termination condition was met.", { }, this->getLocation()); if (!patterns.empty()) @@ -398,7 +398,7 @@ namespace pl::core::ast { std::vector buffer(pattern->getSize()); if (arrayPattern->getSection() == ptrn::Pattern::MainSectionId) - if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize() + 1)) + if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize())) err::E0004.throwError("Array expanded past end of the data before a null-entry was found.", "Try using a while-sized array instead to limit the size of the array.", this->getLocation()); const auto patternSize = pattern->getSize(); diff --git a/lib/source/pl/core/ast/ast_node_bitfield_array_variable_decl.cpp b/lib/source/pl/core/ast/ast_node_bitfield_array_variable_decl.cpp index 7bc284bb..b7622fa8 100644 --- a/lib/source/pl/core/ast/ast_node_bitfield_array_variable_decl.cpp +++ b/lib/source/pl/core/ast/ast_node_bitfield_array_variable_decl.cpp @@ -150,7 +150,7 @@ namespace pl::core::ast { this->m_type->createPatterns(evaluator, patterns); if (arrayPattern->getSection() == ptrn::Pattern::MainSectionId) - if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize() + 1)) + if ((evaluator->getReadOffset() - evaluator->getDataBaseAddress()) > (evaluator->getDataSize())) err::E0004.throwError("Bitfield array expanded past end of the data.", fmt::format("Entry {} exceeded data by {} bytes.", dataIndex, evaluator->getReadOffset() - evaluator->getDataSize()), this->getLocation()); auto ctrlFlow = evaluator->getCurrentControlFlowStatement();