From 683546f71fc846f33d6e5f4305d2f35edc3aecfe Mon Sep 17 00:00:00 2001 From: DongLiang-0 <46414265+DongLiang-0@users.noreply.github.com> Date: Mon, 9 Oct 2023 10:04:10 +0800 Subject: [PATCH] [fix](catalog)fix use regex parse partition may cause backtracking (#24876) --- .../catalog/converters/PartitionNameParser.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/fe/fe-core/src/main/java/com/amazonaws/glue/catalog/converters/PartitionNameParser.java b/fe/fe-core/src/main/java/com/amazonaws/glue/catalog/converters/PartitionNameParser.java index 1419896a58..7ecc745057 100644 --- a/fe/fe-core/src/main/java/com/amazonaws/glue/catalog/converters/PartitionNameParser.java +++ b/fe/fe-core/src/main/java/com/amazonaws/glue/catalog/converters/PartitionNameParser.java @@ -30,12 +30,10 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map.Entry; import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; public class PartitionNameParser { - private static final Pattern PARTITION_NAME_VALUE_PATTERN = Pattern.compile("([^/]+)=([^/]+)"); + private static final String PARTITION_DELIMITER = "="; private static final String PARTITION_NAME_DELIMITER = "/"; private static final char STORE_AS_NUMBER = 'n'; @@ -117,11 +115,10 @@ public class PartitionNameParser { private static AbstractMap.SimpleEntry getPartitionColumnValuePair(String partition) { String column = null; String value = null; - Matcher partitionMatcher = PARTITION_NAME_VALUE_PATTERN.matcher(partition); - - if (partitionMatcher.matches()) { - column = unescapePathName(partitionMatcher.group(1)); - value = unescapePathName(partitionMatcher.group(2)); + String[] splitPartition = partition.split(PARTITION_DELIMITER); + if (splitPartition.length == 2) { + column = unescapePathName(splitPartition[0]); + value = unescapePathName(splitPartition[1]); } else { throw new InvalidPartitionNameException(partition); }