{"record":{"id":"2c1875585497ce62","repo":"theonedev/onedev","slug":"illegal-escape-in-diff-fromdelta-param","errorCode":null,"errorMessage":"Illegal escape in diff_fromDelta: ${param}","messagePattern":"Illegal escape 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":1526,"sourceCode":"\t\t\t\t// Blank tokens are ok (from a trailing \\t).\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// Each token begins with a one character parameter which specifies\n\t\t\t// the\n\t\t\t// operation of this token (delete, insert, equality).\n\t\t\tString param = token.substring(1);\n\t\t\tswitch (token.charAt(0)) {\n\t\t\t\tcase '+':\n\t\t\t\t\t// decode would change all \"+\" to \" \"\n\t\t\t\t\tparam = param.replace(\"+\", \"%2B\");\n\t\t\t\t\ttry {\n\t\t\t\t\t\tparam = URLDecoder.decode(param, \"UTF-8\");\n\t\t\t\t\t} catch (UnsupportedEncodingException e) {\n\t\t\t\t\t\t// Not likely on modern system.\n\t\t\t\t\t\tthrow new Error(\"This system does not support UTF-8.\", e);\n\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}","sourceCodeStart":1508,"sourceCodeEnd":1544,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-core/src/main/java/io/onedev/server/util/diff/DiffMatchPatch.java#L1508-L1544","documentation":"In diff_fromDelta, each token's parameter is URL-decoded; a malformed percent-escape sequence causes IllegalArgumentException, rethrown as 'Illegal escape in diff_fromDelta' naming the bad parameter. Indicates a corrupted delta string.","triggerScenarios":"Thrown at server-core/src/main/java/io/onedev/server/util/diff/DiffMatchPatch.java:1526 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Regenerate the delta via diff_toDelta instead of hand-editing it.","Ensure '+' characters are encoded as %2B in the delta text."],"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-14T00:17:10.932Z"}