{"record":{"id":"40813759cf59157c","repo":"flarum/framework","slug":"page-offset-must-be-at-least-0","errorCode":null,"errorMessage":"page[offset] must be at least 0","messagePattern":"page\\[offset\\] must be at least 0","errorType":"http","errorClass":"BadRequestException","httpStatus":400,"severity":"error","filePath":"framework/core/src/Http/RequestUtil.php","lineNumber":197,"sourceCode":"        $page = (int) ($request->getQueryParams()['page']['number'] ?? 1);\n\n        if ($page < 1) {\n            throw new BadRequestException('page[number] must be at least 1');\n        }\n\n        return ($page - 1) * $limit;\n    }\n\n    public static function extractOffset(Request $request, ?int $limit = 0): int\n    {\n        if ($request->getQueryParams()['page']['number'] ?? false) {\n            return self::extractOffsetFromNumber($request, $limit);\n        }\n\n        $offset = (int) ($request->getQueryParams()['page']['offset'] ?? 0);\n\n        if ($offset < 0) {\n            throw new BadRequestException('page[offset] must be at least 0');\n        }\n\n        return $offset;\n    }\n\n    public static function extractInclude(Request $request, ?array $available): array\n    {\n        $include = $request->getQueryParams()['include'] ?? '';\n\n        if (! is_string($include)) {\n            throw new BadRequestException('include must be a string');\n        }\n\n        $includes = array_filter(explode(',', $include));\n\n        $invalid = array_diff($includes, $available);\n\n        if (count($invalid)) {","sourceCodeStart":179,"sourceCodeEnd":215,"githubUrl":"https://github.com/flarum/framework/blob/4b939f685389bfe8a380e9e28ddf305a1c66950c/framework/core/src/Http/RequestUtil.php#L179-L215","documentation":"Guard in RequestUtil::extractOffset: when paginating with page[offset], a negative offset is meaningless (offsets index into the result set from 0), so a 400 BadRequestException is thrown. Requests using page[number] never reach this branch.","triggerScenarios":"Thrown at framework/core/src/Http/RequestUtil.php:197 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Use page[offset] >= 0","Use page[number] pagination instead of raw offsets","Fix client code that computes a negative offset (e.g. page counter underflow)"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"4b939f685389bfe8a380e9e28ddf305a1c66950c","analyzedAt":"2026-09-15T18:09:20.879Z","contentChangedAt":"2026-09-15T18:09:20.879Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}