Skip to content

Commit 8545613

Browse files
committed
fix(metadata): improve error handling for shape and data_offsets parsing
1 parent 1980045 commit 8545613

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

pkg/distribution/internal/safetensors/metadata.go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,21 +87,27 @@ func ParseSafetensorsHeader(path string) (*Header, error) {
8787
// Parse shape
8888
var shape []int64
8989
if shapeArray, ok := tensorMap["shape"].([]interface{}); ok {
90-
for _, v := range shapeArray {
91-
if floatVal, ok := v.(float64); ok {
92-
shape = append(shape, int64(floatVal))
90+
for index, v := range shapeArray {
91+
floatVal, ok := v.(float64)
92+
if !ok {
93+
return nil, fmt.Errorf("invalid shape value for tensor %q at index %d: expected number, got %T", name, index, v)
9394
}
95+
shape = append(shape, int64(floatVal))
9496
}
9597
}
9698

9799
// Parse data_offsets
98100
var dataOffsets [2]int64
99-
if offsetsArray, ok := tensorMap["data_offsets"].([]interface{}); ok && len(offsetsArray) == 2 {
100-
if start, ok := offsetsArray[0].(float64); ok {
101-
dataOffsets[0] = int64(start)
101+
if offsetsArray, ok := tensorMap["data_offsets"].([]interface{}); ok {
102+
if len(offsetsArray) != 2 {
103+
return nil, fmt.Errorf("invalid data_offsets for tensor %q: expected 2 elements, got %d", name, len(offsetsArray))
102104
}
103-
if end, ok := offsetsArray[1].(float64); ok {
104-
dataOffsets[1] = int64(end)
105+
for index, offset := range offsetsArray {
106+
floatVal, ok := offset.(float64)
107+
if !ok {
108+
return nil, fmt.Errorf("invalid data_offsets value for tensor %q at index %d: expected number, got %T", name, index, offset)
109+
}
110+
dataOffsets[index] = int64(floatVal)
105111
}
106112
}
107113

0 commit comments

Comments
 (0)