{"record":{"id":"14d93192ee4d7c1d","repo":"theonedev/onedev","slug":"invalid-pull-request-number-0","errorCode":null,"errorMessage":"Invalid pull request number: {0}","messagePattern":"Invalid pull request number: (.+?)","errorType":"validation","errorClass":"NotAcceptableException","httpStatus":406,"severity":"error","filePath":"server-core/src/main/java/io/onedev/server/web/page/project/pullrequests/detail/PullRequestDetailPage.java","lineNumber":253,"sourceCode":"\n\tpublic PullRequestDetailPage(PageParameters params) {\n\t\tsuper(params);\n\n\t\tString requestNumberString = params.get(PARAM_REQUEST).toString();\n\t\tif (StringUtils.isBlank(requestNumberString)) {\n\t\t\tthrow new RestartResponseException(ProjectPullRequestsPage.class,\n\t\t\t\t\tProjectPullRequestsPage.paramsOf(getProject(), null, 0));\n\t\t}\n\n\t\trequestModel = new LoadableDetachableModel<>() {\n\n\t\t\t@Override\n\t\t\tprotected PullRequest load() {\n\t\t\t\tLong requestNumber;\n\t\t\t\ttry {\n\t\t\t\t\trequestNumber = Long.valueOf(requestNumberString);\n\t\t\t\t} catch (NumberFormatException e) {\n\t\t\t\t\tthrow new NotAcceptableException(MessageFormat.format(_T(\"Invalid pull request number: {0}\"), requestNumberString));\n\t\t\t\t}\n\n\t\t\t\tPullRequest request = pullRequestService.find(getProject(), requestNumber);\n\t\t\t\tif (request == null) {\n\t\t\t\t\tthrow new EntityNotFoundException(MessageFormat.format(_T(\"Unable to find pull request #{0} in project {1}\"), requestNumber, getProject().getPath()));\n\t\t\t\t} else if (!request.getTargetProject().equals(getProject())) {\n\t\t\t\t\tthrow new RestartResponseException(getPageClass(), paramsOf(request));\n\t\t\t\t} else {\n\t\t\t\t\treturn request;\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\n\t\tif (!getPullRequest().isValid()) {\n\t\t\tthrow new RestartResponseException(InvalidPullRequestPage.class,\n\t\t\t\t\tInvalidPullRequestPage.paramsOf(getPullRequest()));\n\t\t}","sourceCodeStart":235,"sourceCodeEnd":271,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-core/src/main/java/io/onedev/server/web/page/project/pullrequests/detail/PullRequestDetailPage.java#L235-L271","documentation":"PullRequestDetailPage parses the request number from URL parameters and throws NotAcceptableException when it is not a valid Long. Format validation happens before any service lookup, so this is purely an input-format error.","triggerScenarios":"Visiting a pull request detail URL with a non-numeric number segment, e.g. /~pulls/abc; link generation inserting a PR title/key instead of the numeric request number.","commonSituations":"Hand-edited URLs; truncated bookmarks; scripts that format PR references like '#12' or 'PR-12' into URLs where only '12' is valid.","solutions":["Use only the bare numeric request number in the URL.","Generate links via PullRequestDetailPage.paramsOf(request) instead of string concatenation.","Strip non-numeric characters (like '#') from the number before building the URL."],"exampleFix":"// before\nString url = \"/~pulls/\" + \"#\" + prNumber;\n// after\nString url = \"/~pulls/\" + request.getNumber();","handlingStrategy":"validation","validationCode":"if (!requestNumberStr.matches(\"\\\\d+\")) throw new IllegalArgumentException(\"PR number must be numeric: \" + requestNumberStr);\nLong number = Long.valueOf(requestNumberStr);","typeGuard":"Long parseRequestNumber(String s) { try { return Long.valueOf(s); } catch (NumberFormatException e) { return null; } }","tryCatchPattern":"try { open(PullRequestDetailPage.paramsOf(request)); } catch (NumberFormatException e) { log.error(\"Bad PR number format\"); }","preventionTips":["Use PullRequestDetailPage.paramsOf(request) for link building.","Strip decorations like '#' or 'PR-' before forming URLs.","Never interpolate titles or keys into numeric URL segments."],"tags":["wicket","pull-requests","url-parameter","number-format"],"backgroundTag":"invalid-argument-format","analyzedSha":"d44925c47c37992c828ea673a5f9620539bc3ff2","analyzedAt":"2026-09-06T07:18:27.995Z","contentChangedAt":"2026-09-06T07:18:27.995Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}