ソースを参照

LibWasm: Validate that function and code sections match

Diego 1 年間 前
コミット
94c2b85959
1 ファイル変更8 行追加1 行削除
  1. 8 1
      Userland/Libraries/LibWasm/Parser/Parser.cpp

+ 8 - 1
Userland/Libraries/LibWasm/Parser/Parser.cpp

@@ -1483,12 +1483,17 @@ bool Module::populate_sections()
 {
     auto is_ok = true;
     FunctionSection const* function_section { nullptr };
+    bool seen_code_section = false;
     for_each_section_of_type<FunctionSection>([&](FunctionSection const& section) { function_section = &section; });
     for_each_section_of_type<CodeSection>([&](CodeSection const& section) {
-        if (!function_section) {
+        if (!function_section && section.functions().is_empty()) {
+            return;
+        }
+        if (!function_section || function_section->types().size() != section.functions().size()) {
             is_ok = false;
             return;
         }
+        seen_code_section = true;
         size_t index = 0;
         for (auto& entry : section.functions()) {
             if (function_section->types().size() <= index) {
@@ -1505,6 +1510,8 @@ bool Module::populate_sections()
             ++index;
         }
     });
+    if (!seen_code_section && function_section && !function_section->types().is_empty())
+        return false;
     return is_ok;
 }