Tighten Seriatim input validation
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"math"
|
||||
"math/big"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
@@ -124,7 +125,7 @@ func sourceUnit(segment segment, index int, seen map[string]struct{}) (source.So
|
||||
if err != nil {
|
||||
return source.SourceUnit{}, err
|
||||
}
|
||||
if end < start {
|
||||
if end.Cmp(start) < 0 {
|
||||
return source.SourceUnit{}, inputErrorf("segment %q end must be greater than or equal to start", segment.ID)
|
||||
}
|
||||
|
||||
@@ -144,22 +145,26 @@ func sourceUnit(segment segment, index int, seen map[string]struct{}) (source.So
|
||||
}, nil
|
||||
}
|
||||
|
||||
func validTimestamp(value fmt.Stringer, label string) (float64, error) {
|
||||
func validTimestamp(value fmt.Stringer, label string) (*big.Rat, error) {
|
||||
raw := strings.TrimSpace(value.String())
|
||||
if raw == "" {
|
||||
return 0, inputErrorf("%s must not be empty", label)
|
||||
return nil, inputErrorf("%s must not be empty", label)
|
||||
}
|
||||
parsed, err := strconv.ParseFloat(raw, 64)
|
||||
if err != nil {
|
||||
return 0, inputErrorf("%s must be a valid number: %w", label, err)
|
||||
return nil, inputErrorf("%s must be a valid number: %w", label, err)
|
||||
}
|
||||
if math.IsInf(parsed, 0) || math.IsNaN(parsed) {
|
||||
return 0, inputErrorf("%s must be finite", label)
|
||||
return nil, inputErrorf("%s must be finite", label)
|
||||
}
|
||||
if parsed < 0 {
|
||||
return 0, inputErrorf("%s must not be negative", label)
|
||||
return nil, inputErrorf("%s must not be negative", label)
|
||||
}
|
||||
return parsed, nil
|
||||
rat, ok := new(big.Rat).SetString(raw)
|
||||
if !ok {
|
||||
return nil, inputErrorf("%s must be a valid number", label)
|
||||
}
|
||||
return rat, nil
|
||||
}
|
||||
|
||||
func documentID(requestedID string, metadata map[string]any, rawDigest string) string {
|
||||
|
||||
Reference in New Issue
Block a user