Skip to content

Commit 60b9371

Browse files
author
Jeen Broekstra
authored
Merge pull request #793 from jamesrdf/issues/#792-dollar-sign
Fix #792: Encode dollar sign in repository template replacement
2 parents cfa6d6c + 46e6bdb commit 60b9371

2 files changed

Lines changed: 21 additions & 2 deletions

File tree

core/repository/api/src/main/java/org/eclipse/rdf4j/repository/config/ConfigTemplate.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ private void parseTemplate() {
7575
if (!variableMap.containsKey(var)) {
7676
variableMap.put(var, tokens.subList(1, tokens.size()));
7777
int start = matcher.start();
78-
String before = template.substring(start - 3, start);
78+
String before = template.substring(Math.max(start - 3, 0), start);
7979
int end = matcher.end();
8080
if (("'''".equals(before) || "\"\"\"".equals(before))
8181
&& before.equals(template.substring(end, end + 3)))
@@ -105,7 +105,7 @@ public String render(Map<String, String> valueMap) {
105105
if (!value.isEmpty() && multilineMap.containsKey(var)) {
106106
value = escapeMultilineQuotes(multilineMap.get(var), value);
107107
}
108-
matcher.appendReplacement(result, value);
108+
matcher.appendReplacement(result, Matcher.quoteReplacement(value));
109109
}
110110
matcher.appendTail(result);
111111
return result.toString();

core/repository/api/src/test/java/org/eclipse/rdf4j/repository/config/TestConfigTemplate.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99

1010
import static org.junit.Assert.assertEquals;
1111

12+
import java.util.LinkedHashMap;
13+
import java.util.Map;
14+
1215
import org.junit.Test;
1316

1417
/**
@@ -47,4 +50,20 @@ public final void testNonEscapeOfShorterSequences() {
4750
public final void testInvalidDelimiterThrowsException() {
4851
ConfigTemplate.escapeMultilineQuotes("'", "any value");
4952
}
53+
54+
@Test
55+
public final void testSimpleCharacters() {
56+
ConfigTemplate temp = new ConfigTemplate("{%value%}");
57+
Map<String, String> map = new LinkedHashMap<String, String>();
58+
map.put("value", "sob");
59+
assertEquals("sob", temp.render(map));
60+
}
61+
62+
@Test
63+
public final void testSpecialCharacters() {
64+
ConfigTemplate temp = new ConfigTemplate("{%value%}");
65+
Map<String, String> map = new LinkedHashMap<String, String>();
66+
map.put("value", "$0b");
67+
assertEquals("$0b", temp.render(map));
68+
}
5069
}

0 commit comments

Comments
 (0)