{"record":{"id":"3f0fb9b86a12c24e","repo":"theonedev/onedev","slug":"description-too-long-3f0fb9","errorCode":null,"errorMessage":"Description too long","messagePattern":"Description too long","errorType":"validation","errorClass":"ExplicitException","httpStatus":null,"severity":"warning","filePath":"server-core/src/main/java/io/onedev/server/service/impl/DefaultPullRequestChangeService.java","lineNumber":125,"sourceCode":"\t\t\t\n\t\t\tPullRequestChange change = new PullRequestChange();\n\t\t\tchange.setDate(new Date());\n\t\t\tchange.setRequest(request);\n\t\t\tchange.setData(new PullRequestTitleChangeData(prevTitle, title));\n\t\t\tchange.setUser(user);\n\t\t\tcreate(change, null);\n\t\t\t\n\t\t\tdao.persist(request);\n\t\t}\n\t}\n\n\t@Transactional\n\t@Override\n\tpublic void changeDescription(User user, PullRequest request, @Nullable String description) {\n\t\tString prevDescription = request.getDescription();\n\t\tif (!Objects.equals(description, prevDescription)) {\n\t\t\tif (description != null && description.length() > PullRequest.MAX_DESCRIPTION_LEN)\n\t\t\t\tthrow new ExplicitException(\"Description too long\");\n\t\t\trequest.setDescription(description);\n\t\t\trequest.setDescriptionRevisionCount(request.getDescriptionRevisionCount() + 1);\n\t\t\treferenceChangeService.addReferenceChange(user, request, description);\n\n\t\t\tPullRequestChange change = new PullRequestChange();\n\t\t\tchange.setRequest(request);\n\t\t\tchange.setUser(user);\n\t\t\tchange.setData(new PullRequestDescriptionChangeData(prevDescription, request.getDescription()));\n\t\t\tcreate(change, null);\n\t\t\tdao.persist(request);\n\n\t\t\tvar revision = new PullRequestDescriptionRevision();\n\t\t\trevision.setRequest(request);\n\t\t\trevision.setUser(user);\n\t\t\trevision.setOldContent(prevDescription);\n\t\t\trevision.setNewContent(description);\n\t\t\tdao.persist(revision);\n\t\t}","sourceCodeStart":107,"sourceCodeEnd":143,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-core/src/main/java/io/onedev/server/service/impl/DefaultPullRequestChangeService.java#L107-L143","documentation":"OneDev throws this ExplicitException when a user tries to save a pull request description longer than PullRequest.MAX_DESCRIPTION_LEN characters. The check runs inside changeDescription before persisting, because the description column has a hard length limit. It is a deliberate validation guard, not a bug.","triggerScenarios":"Calling DefaultPullRequestChangeService.changeDescription(user, request, description) (directly or via the REST/UI edit-description endpoint) with a non-null description string whose length() exceeds PullRequest.MAX_DESCRIPTION_LEN.","commonSituations":"Pasting large markdown documents, generated release notes, or long logs into the PR description; API scripts that programmatically set descriptions from unbounded text.","solutions":["Shorten the description to at most PullRequest.MAX_DESCRIPTION_LEN characters before calling changeDescription","Truncate or abbreviate the text programmatically (e.g. StringUtils.abbreviate(description, PullRequest.MAX_DESCRIPTION_LEN))","If the full content matters, link to an external document or attach it as a file/comment instead of the description"],"exampleFix":"// before\nprService.changeDescription(user, request, hugeGeneratedNotes); // throws \"Description too long\"\n// after\nString desc = StringUtils.abbreviate(hugeGeneratedNotes, PullRequest.MAX_DESCRIPTION_LEN);\nprService.changeDescription(user, request, desc);","handlingStrategy":"validation","validationCode":"if (description != null && description.length() > PullRequest.MAX_DESCRIPTION_LEN)\n    throw new IllegalArgumentException(\"description exceeds \" + PullRequest.MAX_DESCRIPTION_LEN + \" chars\");","typeGuard":"boolean isAcceptableDescription(String d) {\n    return d == null || d.length() <= PullRequest.MAX_DESCRIPTION_LEN;\n}","tryCatchPattern":"try {\n    changeService.changeDescription(user, request, description);\n} catch (ExplicitException e) {\n    // show \"Description too long\" to the user / truncate and retry\n}","preventionTips":["Validate description length in the UI/form with a maxlength bound","Truncate programmatically with StringUtils.abbreviate before saving","Store very long content in attachments or linked documents"],"tags":["validation","pull-request","description-length"],"backgroundTag":"value-out-of-range","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"}