Skip to content

Commit 4730746

Browse files
committed
fix: panic when using pageSize < 1
Signed-off-by: Alessio Pragliola <seth.pro@gmail.com>
1 parent f1c83c6 commit 4730746

2 files changed

Lines changed: 49 additions & 0 deletions

File tree

catalog/internal/server/openapi/pagination.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ func newPaginator[T model.Sortable](pageSize string, orderBy model.OrderByField,
3535
if err != nil {
3636
return nil, fmt.Errorf("error converting page size to int32: %w", err)
3737
}
38+
if pageSize64 < 1 {
39+
return nil, fmt.Errorf("pageSize must be at least 1, got %d", pageSize64)
40+
}
3841
p.PageSize = int32(pageSize64)
3942
}
4043

catalog/internal/server/openapi/pagination_test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,52 @@ func TestPaginateSources(t *testing.T) {
149149
}
150150
}
151151

152+
func TestNewPaginator_InvalidPageSize(t *testing.T) {
153+
testCases := []struct {
154+
name string
155+
pageSize string
156+
expectError bool
157+
errContains string
158+
}{
159+
{
160+
name: "pageSize=0 returns error",
161+
pageSize: "0",
162+
expectError: true,
163+
errContains: "pageSize must be at least 1",
164+
},
165+
{
166+
name: "negative pageSize returns error",
167+
pageSize: "-5",
168+
expectError: true,
169+
errContains: "pageSize must be at least 1",
170+
},
171+
{
172+
name: "valid pageSize=1 works",
173+
pageSize: "1",
174+
expectError: false,
175+
},
176+
{
177+
name: "empty pageSize uses default",
178+
pageSize: "",
179+
expectError: false,
180+
},
181+
}
182+
183+
for _, tc := range testCases {
184+
t.Run(tc.name, func(t *testing.T) {
185+
paginator, err := newPaginator[model.CatalogSource](tc.pageSize, "ID", "", "")
186+
if tc.expectError {
187+
assert.Error(t, err)
188+
assert.Contains(t, err.Error(), tc.errContains)
189+
assert.Nil(t, paginator)
190+
} else {
191+
assert.NoError(t, err)
192+
assert.NotNil(t, paginator)
193+
}
194+
})
195+
}
196+
}
197+
152198
func TestPaginateSources_NoDuplicates(t *testing.T) {
153199
allSources := createCatalogSources(100)
154200
pageSize := "10"

0 commit comments

Comments
 (0)