From 14d7bcfaed67f59af1fb43e1fb272f14f90889c3 Mon Sep 17 00:00:00 2001 From: Takeshi Yoneda Date: Wed, 20 Apr 2022 10:54:12 +0900 Subject: [PATCH] Fix validate start section with imports (#485) Signed-off-by: Takeshi Yoneda --- internal/wasm/module.go | 4 ++-- internal/wasm/module_test.go | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/internal/wasm/module.go b/internal/wasm/module.go index f350d61c..3d8a6931 100644 --- a/internal/wasm/module.go +++ b/internal/wasm/module.go @@ -191,9 +191,9 @@ func (m *Module) TypeOfFunction(funcIdx Index) *FunctionType { return nil } funcImportCount := Index(0) - for i, im := range m.ImportSection { + for _, im := range m.ImportSection { if im.Type == ExternTypeFunc { - if funcIdx == Index(i) { + if funcIdx == funcImportCount { if im.DescFunc >= typeSectionLength { return nil } diff --git a/internal/wasm/module_test.go b/internal/wasm/module_test.go index 196f823e..0bd3e33c 100644 --- a/internal/wasm/module_test.go +++ b/internal/wasm/module_test.go @@ -331,6 +331,21 @@ func TestModule_validateStartSection(t *testing.T) { }) } }) + t.Run("imported valid func", func(t *testing.T) { + index := Index(1) + m := Module{ + StartSection: &index, + TypeSection: []*FunctionType{{}, {Results: []ValueType{ValueTypeI32}}}, + ImportSection: []*Import{ + {Type: ExternTypeFunc, DescFunc: 1}, + // import with index 1 is global but this should be skipped when searching imported functions. + {Type: ExternTypeGlobal}, + {Type: ExternTypeFunc, DescFunc: 0}, // This one must be selected. + }, + } + err := m.validateStartSection() + require.NoError(t, err) + }) } func TestModule_validateGlobals(t *testing.T) {