{"record":{"id":"11473a3392b2d09e","repo":"theonedev/onedev","slug":"negative-number-in-diff-fromdelta-param","errorCode":null,"errorMessage":"Negative number in diff_fromDelta: ${param}","messagePattern":"Negative number in diff_fromDelta: (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"server-core/src/main/java/io/onedev/server/util/diff/DiffMatchPatch.java","lineNumber":1542,"sourceCode":"\t\t\t\t\t} catch (IllegalArgumentException e) {\n\t\t\t\t\t\t// Malformed URI sequence.\n\t\t\t\t\t\tthrow new IllegalArgumentException(\"Illegal escape in diff_fromDelta: \"\n\t\t\t\t\t\t\t\t+ param, e);\n\t\t\t\t\t}\n\t\t\t\t\tdiffs.add(new Diff(Operation.INSERT, param));\n\t\t\t\t\tbreak;\n\t\t\t\tcase '-':\n\t\t\t\t\t// Fall through.\n\t\t\t\tcase '=':\n\t\t\t\t\tint n;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tn = Integer.parseInt(param);\n\t\t\t\t\t} catch (NumberFormatException e) {\n\t\t\t\t\t\tthrow new IllegalArgumentException(\"Invalid number in diff_fromDelta: \"\n\t\t\t\t\t\t\t\t+ param, e);\n\t\t\t\t\t}\n\t\t\t\t\tif (n < 0) {\n\t\t\t\t\t\tthrow new IllegalArgumentException(\"Negative number in diff_fromDelta: \"\n\t\t\t\t\t\t\t\t+ param);\n\t\t\t\t\t}\n\t\t\t\t\tString text;\n\t\t\t\t\ttry {\n\t\t\t\t\t\ttext = text1.substring(pointer, pointer += n);\n\t\t\t\t\t} catch (StringIndexOutOfBoundsException e) {\n\t\t\t\t\t\tthrow new IllegalArgumentException(\"Delta length (\" + pointer\n\t\t\t\t\t\t\t\t+ \") larger than source text length (\" + text1.length() + \").\", e);\n\t\t\t\t\t}\n\t\t\t\t\tif (token.charAt(0) == '=') {\n\t\t\t\t\t\tdiffs.add(new Diff(Operation.EQUAL, text));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdiffs.add(new Diff(Operation.DELETE, text));\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t// Anything else is an error.\n\t\t\t\t\tthrow new IllegalArgumentException(\"Invalid diff operation in diff_fromDelta: \"","sourceCodeStart":1524,"sourceCodeEnd":1560,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-core/src/main/java/io/onedev/server/util/diff/DiffMatchPatch.java#L1524-L1560","documentation":"Delta-decoder guard in DiffMatchPatch.diff_fromDelta: a delta token prefixed with '-' or '=' parsed to a negative number; those operations require a non-negative length, so IllegalArgumentException is thrown for the malformed delta string. Fix: supply a well-formed delta encoding (non-negative numeric lengths).","triggerScenarios":"Thrown at server-core/src/main/java/io/onedev/server/util/diff/DiffMatchPatch.java:1542 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Regenerate the delta with diff_toDelta.","Fix the negative length prefix in the corrupted token."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}