Skip to content

Commit e4e6f59

Browse files
committed
Require ordered list of subassemblies
1 parent 8d88542 commit e4e6f59

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

libevmasm/Assembly.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -565,6 +565,7 @@ std::pair<std::shared_ptr<Assembly>, std::vector<std::string>> Assembly::fromJSO
565565
{
566566
solRequire(_json[".data"].isObject(), AssemblyImportException, "Optional member '.data' is not an object.");
567567
Json::Value const& data = _json[".data"];
568+
size_t subId{};
568569
for (Json::ValueConstIterator dataIter = data.begin(); dataIter != data.end(); dataIter++)
569570
{
570571
solAssert(dataIter.key().isString());
@@ -598,13 +599,13 @@ std::pair<std::shared_ptr<Assembly>, std::vector<std::string>> Assembly::fromJSO
598599
{
599600
solThrow(AssemblyImportException, "The key '" + dataItemID + "' inside '.data' is out of the supported integer range.");
600601
}
602+
solRequire(subId == index, AssemblyImportException, "Invalid order of keys in '.data'. Expect key '" + std::to_string(subId) + "' but got '" + dataItemID + "'.");
601603

602-
if (result->m_subs.size() <= index)
603-
result->m_subs.resize(index + 1);
604604
auto [subassembly, emptySourceList] = Assembly::fromJSON(dataItem, _level == 0 ? parsedSourceList : _sourceList, _level + 1);
605605
solAssert(subassembly);
606606
solAssert(emptySourceList.empty());
607-
result->m_subs[index] = subassembly;
607+
result->m_subs.emplace_back(subassembly);
608+
subId++;
608609
}
609610
else
610611
solThrow(AssemblyImportException, "The value of key '" + dataItemID + "' inside '.data' is neither a hex string nor an object.");

0 commit comments

Comments
 (0)