Skip to content

Commit 4e4b4ba

Browse files
ziyanTOPXiaoHongbo-Hope
authored andcommitted
[cdc] fix special regex characters unescaped in excluded table patterns (#7619)
1 parent e603e91 commit 4e4b4ba

1 file changed

Lines changed: 7 additions & 6 deletions

File tree

paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/CdcActionCommonUtils.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import java.util.List;
3737
import java.util.Map;
3838
import java.util.Set;
39+
import java.util.regex.Pattern;
3940
import java.util.stream.Collectors;
4041

4142
import static org.apache.paimon.flink.action.MultiTablesSinkMode.COMBINED;
@@ -302,19 +303,19 @@ public static String combinedModeTableList(
302303
// be excluded by excluding pattern at the same time
303304
String includingPattern =
304305
String.format("(%s)\\.(%s)", databasePattern, includingTablePattern);
305-
306+
LOG.info("Combined mode including pattern is {}", includingPattern);
306307
if (excludedTables.isEmpty()) {
307308
return includingPattern;
308309
}
309310

311+
// Use Pattern.quote to escape special regex characters (e.g., '$' in mysql table name)
312+
// in database and table names, ensuring exact literal matching in the regex.
310313
String excludingPattern =
311314
excludedTables.stream()
312-
.map(
313-
t ->
314-
String.format(
315-
"(^%s$)",
316-
t.getDatabaseName() + "\\." + t.getObjectName()))
315+
.map(Identifier::getFullName)
316+
.map(n -> String.format("(^%s$)", Pattern.quote(n)))
317317
.collect(Collectors.joining("|"));
318+
LOG.info("Combined mode excluding pattern is {}", excludingPattern);
318319
excludingPattern = "?!" + excludingPattern;
319320
return String.format("(%s)(%s)", excludingPattern, includingPattern);
320321
}

0 commit comments

Comments
 (0)