Skip to content

Commit 44ac8eb

Browse files
dernasherbrezonhferentschik
authored andcommitted
HV-921 Precompile patterns for meta character replacements
1 parent 6435a03 commit 44ac8eb

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

engine/src/main/java/org/hibernate/validator/messageinterpolation/AbstractMessageInterpolator.java

+11-4
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import java.util.Locale;
2424
import java.util.MissingResourceException;
2525
import java.util.ResourceBundle;
26+
import java.util.regex.Matcher;
27+
import java.util.regex.Pattern;
2628

2729
import javax.validation.MessageInterpolator;
2830
import javax.xml.bind.ValidationException;
@@ -110,6 +112,11 @@ public abstract class AbstractMessageInterpolator implements MessageInterpolator
110112
*/
111113
private final boolean cachingEnabled;
112114

115+
private static final Pattern LEFT_BRACE = Pattern.compile("\\{", Pattern.LITERAL);
116+
private static final Pattern RIGHT_BRACE = Pattern.compile("\\}", Pattern.LITERAL);
117+
private static final Pattern SLASH = Pattern.compile("\\\\", Pattern.LITERAL);
118+
private static final Pattern DOLLAR = Pattern.compile("\\$", Pattern.LITERAL);
119+
113120
public AbstractMessageInterpolator() {
114121
this( null );
115122
}
@@ -299,10 +306,10 @@ private String interpolateMessage(String message, Context context, Locale locale
299306
}
300307

301308
private String replaceEscapedLiterals(String resolvedMessage) {
302-
resolvedMessage = resolvedMessage.replace( "\\{", "{" );
303-
resolvedMessage = resolvedMessage.replace( "\\}", "}" );
304-
resolvedMessage = resolvedMessage.replace( "\\\\", "\\" );
305-
resolvedMessage = resolvedMessage.replace( "\\$", "$" );
309+
resolvedMessage = LEFT_BRACE.matcher(resolvedMessage).replaceAll("{");
310+
resolvedMessage = RIGHT_BRACE.matcher(resolvedMessage).replaceAll("}");
311+
resolvedMessage = SLASH.matcher(resolvedMessage).replaceAll(Matcher.quoteReplacement("\\"));
312+
resolvedMessage = DOLLAR.matcher(resolvedMessage).replaceAll(Matcher.quoteReplacement("$"));
306313
return resolvedMessage;
307314
}
308315

0 commit comments

Comments
 (0)