...
1 package binary
2
3 import (
4 "bytes"
5 "fmt"
6
7 "github.com/tetratelabs/wazero/api"
8 "github.com/tetratelabs/wazero/internal/wasm"
9 )
10
11
12
13
14 func decodeTable(r *bytes.Reader, enabledFeatures api.CoreFeatures, ret *wasm.Table) (err error) {
15 ret.Type, err = r.ReadByte()
16 if err != nil {
17 return fmt.Errorf("read leading byte: %v", err)
18 }
19
20 if ret.Type != wasm.RefTypeFuncref {
21 if err = enabledFeatures.RequireEnabled(api.CoreFeatureReferenceTypes); err != nil {
22 return fmt.Errorf("table type funcref is invalid: %w", err)
23 }
24 }
25
26 ret.Min, ret.Max, err = decodeLimitsType(r)
27 if err != nil {
28 return fmt.Errorf("read limits: %v", err)
29 }
30 if ret.Min > wasm.MaximumFunctionIndex {
31 return fmt.Errorf("table min must be at most %d", wasm.MaximumFunctionIndex)
32 }
33 if ret.Max != nil {
34 if *ret.Max < ret.Min {
35 return fmt.Errorf("table size minimum must not be greater than maximum")
36 }
37 }
38 return
39 }
40
View as plain text