Skip to content

Commit f49851d

Browse files
author
Lee
committed
Type check the metadata to avoid a possible panic on bad input
1 parent e09d966 commit f49851d

1 file changed

Lines changed: 24 additions & 6 deletions

File tree

‎verify.go‎

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -612,42 +612,60 @@ type metadataProviderFromParams struct {
612612

613613
func (mp metadataProviderFromParams) Created() (int, error) {
614614
if val, ok := mp.Params.Get(string(MetaCreated)); ok {
615-
return int(val.(int64)), nil
615+
if intVal, ok := val.(int64); ok {
616+
return int(intVal), nil
617+
}
618+
return 0, newError(ErrInvalidMetadata, fmt.Sprintf("created parameter has invalid type %T, expected int64", val))
616619
}
617620
return 0, fmt.Errorf("No created value")
618621
}
619622

620623
func (mp metadataProviderFromParams) Expires() (int, error) {
621624
if val, ok := mp.Params.Get(string(MetaExpires)); ok {
622-
return int(val.(int64)), nil
625+
if intVal, ok := val.(int64); ok {
626+
return int(intVal), nil
627+
}
628+
return 0, newError(ErrInvalidMetadata, fmt.Sprintf("expires parameter has invalid type %T, expected int64", val))
623629
}
624630
return 0, fmt.Errorf("No expires value")
625631
}
626632

627633
func (mp metadataProviderFromParams) Nonce() (string, error) {
628634
if val, ok := mp.Params.Get(string(MetaNonce)); ok {
629-
return val.(string), nil
635+
if strVal, ok := val.(string); ok {
636+
return strVal, nil
637+
}
638+
return "", newError(ErrInvalidMetadata, fmt.Sprintf("nonce parameter has invalid type %T, expected string", val))
630639
}
631640
return "", fmt.Errorf("No nonce value")
632641
}
633642

634643
func (mp metadataProviderFromParams) Alg() (string, error) {
635644
if val, ok := mp.Params.Get(string(MetaAlgorithm)); ok {
636-
return val.(string), nil
645+
if strVal, ok := val.(string); ok {
646+
return strVal, nil
647+
}
648+
return "", newError(ErrInvalidMetadata, fmt.Sprintf("alg parameter has invalid type %T, expected string", val))
637649
}
638650
return "", fmt.Errorf("No alg value")
639651
}
640652

641653
func (mp metadataProviderFromParams) KeyID() (string, error) {
642654
if val, ok := mp.Params.Get(string(MetaKeyID)); ok {
643-
return val.(string), nil
655+
if strVal, ok := val.(string); ok {
656+
return strVal, nil
657+
}
658+
return "", newError(ErrInvalidMetadata, fmt.Sprintf("keyid parameter has invalid type %T, expected string", val))
644659
}
645660
return "", fmt.Errorf("No keyid value")
646661
}
647662

648663
func (mp metadataProviderFromParams) Tag() (string, error) {
649664
if val, ok := mp.Params.Get(string(MetaTag)); ok {
650-
return val.(string), nil
665+
if strVal, ok := val.(string); ok {
666+
return strVal, nil
667+
}
668+
return "", newError(ErrInvalidMetadata, fmt.Sprintf("tag parameter has invalid type %T, expected string", val))
651669
}
652670
return "", fmt.Errorf("No tag value")
653671
}

0 commit comments

Comments
 (0)