Skip to content

Commit 5515a1c

Browse files
authored
fix: ByteFmt panic on negative int64 values (#1200)
1 parent 3abf6ed commit 5515a1c

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-2
lines changed

pkg/util/bytefmt.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,27 @@ import (
55
"math"
66
)
77

8+
const unknownSize = "unknown"
9+
810
var unitArr = []string{"B", "KB", "MB", "GB", "TB", "PB", "EB"}
911

1012
func ByteFmt(size int64) string {
1113
if size == 0 {
12-
return "unknown"
14+
return unknownSize
15+
}
16+
// Handle negative values
17+
if size < 0 {
18+
return unknownSize
1319
}
1420
fs := float64(size)
1521
p := int(math.Log(fs) / math.Log(1024))
22+
// Ensure index is within bounds
23+
if p < 0 {
24+
p = 0
25+
}
26+
if p >= len(unitArr) {
27+
p = len(unitArr) - 1
28+
}
1629
val := fs / math.Pow(1024, float64(p))
1730
_, frac := math.Modf(val)
1831
if frac > 0 {

pkg/util/bytefmt_test.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,17 @@ func TestByteFmt(t *testing.T) {
1414
{
1515
name: "unknown",
1616
args: args{size: int64(0)},
17-
want: "unknown",
17+
want: unknownSize,
18+
},
19+
{
20+
name: "negative value",
21+
args: args{size: int64(-1)},
22+
want: unknownSize,
23+
},
24+
{
25+
name: "negative min int64",
26+
args: args{size: int64(-9223372036854775808)},
27+
want: unknownSize,
1828
},
1929
{
2030
name: "100B",
@@ -51,6 +61,11 @@ func TestByteFmt(t *testing.T) {
5161
args: args{size: int64(1024 * 1024 * 2)},
5262
want: "2MB",
5363
},
64+
{
65+
name: "large value",
66+
args: args{size: int64(9223372036854775807)}, // max int64
67+
want: "8EB",
68+
},
5469
}
5570
for _, tt := range tests {
5671
t.Run(tt.name, func(t *testing.T) {

0 commit comments

Comments
 (0)