Files
3x-ui/internal/web/service/inbound_util_test.go
T
MHSanaei ab1c509329 fix(service): keep chunk capacity math from overflowing
chunkStrings/chunkInts sized their result with (len+size-1)/size, so a
size near MaxInt wrapped negative and make panicked with "cap out of
range"; count the chunks with div+remainder instead. NormalizeUDPHop's
len-hops+1 is bounded by len(masks) since hops >= 1, so cap at that.

Resolves CodeQL go/allocation-size-overflow alerts #119 and #120.
2026-10-11 22:10:46 +02:00

37 lines
884 B
Go

package service
import (
"math"
"slices"
"testing"
)
func TestNormalizeSubSortIndex(t *testing.T) {
cases := []struct {
in, want int
}{
{0, 1},
{1, 1},
{7, 7},
{-1, -1},
{-10, -10},
}
for _, tc := range cases {
if got := normalizeSubSortIndex(tc.in); got != tc.want {
t.Fatalf("normalizeSubSortIndex(%d) = %d, want %d", tc.in, got, tc.want)
}
}
}
// A size near MaxInt used to overflow the capacity math and panic in make (CodeQL #119).
func TestChunkHugeSizeKeepsOneBatch(t *testing.T) {
strs := []string{"a", "b", "c"}
if got := chunkStrings(strs, math.MaxInt); len(got) != 1 || !slices.Equal(got[0], strs) {
t.Fatalf("chunkStrings(MaxInt) = %v, want [%v]", got, strs)
}
ints := []int{1, 2, 3}
if got := chunkInts(ints, math.MaxInt); len(got) != 1 || !slices.Equal(got[0], ints) {
t.Fatalf("chunkInts(MaxInt) = %v, want [%v]", got, ints)
}
}