diff --git a/pkg/args/args.go b/pkg/args/args.go index 8fdb48c..a840c6e 100644 --- a/pkg/args/args.go +++ b/pkg/args/args.go @@ -169,3 +169,14 @@ func (a *Args) Clone() *Args { } return res } + +// Validate checks that all values in the Args are valid according to UCAN specs +func (a *Args) Validate() error { + for key, value := range a.Values { + if err := limits.ValidateIntegerBoundsIPLD(value); err != nil { + return fmt.Errorf("value for key %q: %w", key, err) + } + } + + return nil +} diff --git a/token/invocation/invocation.go b/token/invocation/invocation.go index 286c456..4ab7b8b 100644 --- a/token/invocation/invocation.go +++ b/token/invocation/invocation.go @@ -272,6 +272,10 @@ func tokenFromModel(m tokenPayloadModel) (*Token, error) { tkn.nonce = m.Nonce tkn.arguments = m.Args + if err := tkn.arguments.Validate(); err != nil { + return nil, fmt.Errorf("invalid arguments: %w", err) + } + tkn.proof = m.Prf tkn.meta = m.Meta