[6.x] Cap CP perPage query parameter to configured ceiling#14668
Merged
Conversation
Clamp the requested `perPage` against `max(pagination_size_options)` at every CP listing and relationship-fieldtype index endpoint so a request like `?perPage=999999` can't force the server to materialize an arbitrary number of rows. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
500 rows per page is unreasonably high as a default option and now also acts as the upper bound for the `?perPage=` query parameter, so trim it from the default list. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
duncanmcclean
pushed a commit
that referenced
this pull request
May 14, 2026
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
CP listing endpoints currently read
?perPage=straight from the request and pass it to the paginator with no validation, so a request like?perPage=999999will materialize an arbitrary number of rows.This PR clamps the effective
perPagetomax(config('statamic.cp.pagination_size_options'))at every CP read site, via a newStatamic::cpPerPage()helper. Values within range pass through unchanged; values above the ceiling are clamped down. The per-page dropdown's behaviour is unaffected.Also drops
500from the defaultpagination_size_options— both as an unreasonably large default page size and to lower the new ceiling. Existing installs will keep500since they'd already have it in theirconfig/statamic/cp.php.