Skip to content

Commit 8baacd7

Browse files
authored
Fix arithmetic overflow crash in request pagination (#637)
* fix: Fix overflow crash in request pagination
1 parent 1385c48 commit 8baacd7

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

Sources/FluentKit/Query/Builder/QueryBuilder+Paginate.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,10 +136,10 @@ public struct PageRequest: Decodable, Sendable {
136136
}
137137

138138
var start: Int {
139-
(self.page - 1) * self.per
139+
(self.page - 1) &* self.per
140140
}
141141

142142
var end: Int {
143-
self.page * self.per
143+
self.page &* self.per
144144
}
145145
}

Tests/FluentKitTests/FluentKitTests.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,6 +717,18 @@ final class FluentKitTests: XCTestCase {
717717
.wait())
718718
}
719719

720+
func testPaginationDoesntCrashOnOverflow() async throws {
721+
let db = DummyDatabaseForTestSQLSerializer()
722+
let pageRequest1 = PageRequest(page: 1184467440737095516, per: 1184467440737095516)
723+
db.fakedRows.append([.init(["aggregate": 1])])
724+
let result = try await Planet2
725+
.query(on: db)
726+
.paginate(pageRequest1)
727+
XCTAssertEqual(result.metadata.page, 1184467440737095516)
728+
XCTAssertEqual(result.metadata.per, 1184467440737095516)
729+
XCTAssertEqual(result.metadata.total, 1)
730+
}
731+
720732
func testModelsWithSpacesSpecified() throws {
721733
let db = DummyDatabaseForTestSQLSerializer()
722734
try db.schema(AltPlanet.schema, space: AltPlanet.space)

0 commit comments

Comments
 (0)