From 96eb363b0178a42d764255f9cb7fe99adf31d42c Mon Sep 17 00:00:00 2001 From: DongLiang-0 <46414265+DongLiang-0@users.noreply.github.com> Date: Sun, 8 Oct 2023 10:09:17 +0800 Subject: [PATCH] [fix](help-module)fix use regex match replaceAll may cause backtracking (#24918) --- .../org/apache/doris/common/MarkDownParser.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/MarkDownParser.java b/fe/fe-core/src/main/java/org/apache/doris/common/MarkDownParser.java index 200c106003..e796f766d9 100755 --- a/fe/fe-core/src/main/java/org/apache/doris/common/MarkDownParser.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/MarkDownParser.java @@ -169,6 +169,19 @@ public class MarkDownParser { // Also, the header in md file is like "## STREAM-LOAD", we need to convert it to "STREAM LOAD", // so that we can execute "help stream load" to show the help doc. return Maps.immutableEntry(key.substring(headLevel).trim().replaceAll("-", " "), - sb.toString().replaceAll("\\s+$", "\n")); + processWhitespace(sb)); + } + + private String processWhitespace(StringBuilder sb) { + int index = sb.length() - 1; + while (index >= 0 && Character.isWhitespace(sb.charAt(index))) { + index--; + } + + if (index < sb.length() - 1) { + sb.setLength(index + 1); + sb.append('\n'); + } + return sb.toString(); } }