From 5515a1c48cd017304b8c4b566b2897877aead53a Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Sun, 28 Dec 2025 21:57:40 +0800 Subject: [PATCH] fix: ByteFmt panic on negative int64 values (#1200) --- pkg/util/bytefmt.go | 15 ++++++++++++++- pkg/util/bytefmt_test.go | 17 ++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/pkg/util/bytefmt.go b/pkg/util/bytefmt.go index e665eba3..77dc950f 100644 --- a/pkg/util/bytefmt.go +++ b/pkg/util/bytefmt.go @@ -5,14 +5,27 @@ import ( "math" ) +const unknownSize = "unknown" + var unitArr = []string{"B", "KB", "MB", "GB", "TB", "PB", "EB"} func ByteFmt(size int64) string { if size == 0 { - return "unknown" + return unknownSize + } + // Handle negative values + if size < 0 { + return unknownSize } fs := float64(size) p := int(math.Log(fs) / math.Log(1024)) + // Ensure index is within bounds + if p < 0 { + p = 0 + } + if p >= len(unitArr) { + p = len(unitArr) - 1 + } val := fs / math.Pow(1024, float64(p)) _, frac := math.Modf(val) if frac > 0 { diff --git a/pkg/util/bytefmt_test.go b/pkg/util/bytefmt_test.go index e040e157..f1be00d6 100644 --- a/pkg/util/bytefmt_test.go +++ b/pkg/util/bytefmt_test.go @@ -14,7 +14,17 @@ func TestByteFmt(t *testing.T) { { name: "unknown", args: args{size: int64(0)}, - want: "unknown", + want: unknownSize, + }, + { + name: "negative value", + args: args{size: int64(-1)}, + want: unknownSize, + }, + { + name: "negative min int64", + args: args{size: int64(-9223372036854775808)}, + want: unknownSize, }, { name: "100B", @@ -51,6 +61,11 @@ func TestByteFmt(t *testing.T) { args: args{size: int64(1024 * 1024 * 2)}, want: "2MB", }, + { + name: "large value", + args: args{size: int64(9223372036854775807)}, // max int64 + want: "8EB", + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) {