diff --git a/src/globalization/TranslationXmlStreamReader.java b/src/globalization/TranslationXmlStreamReader.java index 903bad0e..50cc86e0 100644 --- a/src/globalization/TranslationXmlStreamReader.java +++ b/src/globalization/TranslationXmlStreamReader.java @@ -179,7 +179,7 @@ public class TranslationXmlStreamReader { String value = attribute.getValue(); switch(name.toString()) { case TRANSLATION_KEY_ATTRIBUTE_NAME: - assureIsValidPathExtension(value); + assureIsValidKey(value); path = combinePaths(state.path, value); break; case TRANSLATION_TEMPLATE_ATTRIBUTE_NAME: @@ -218,8 +218,13 @@ public class TranslationXmlStreamReader { } } + private void assureIsValidKey(String value) throws XMLStreamException { + if(value.contains("/")) + throw new javax.xml.stream.XMLStreamException("Key must not contain /"); + } + private String combinePaths(String left, String right) { - return Paths.get(left, right).toString(); + return Paths.get(left, right).normalize().toString(); } private void assureStartElement(XMLEvent event, String name) throws XMLStreamException { diff --git a/src/test/GlobalizationTests.java b/src/test/GlobalizationTests.java index 119a9d7e..e38e290d 100644 --- a/src/test/GlobalizationTests.java +++ b/src/test/GlobalizationTests.java @@ -59,9 +59,9 @@ public class GlobalizationTests { "\n" + "\n" + " \n" + - " \n" + - " \n" + - " \n" + + " \n" + + " \n" + + " \n" + " \n" + " \n" + " \n" + @@ -69,7 +69,7 @@ public class GlobalizationTests { "\n"; List expected = new ArrayList(); - expected.add(new TranslationEntry(Locale.forLanguageTag("en-GB"), "/path1/path2/path3/key1", "1")); + expected.add(new TranslationEntry(Locale.forLanguageTag("en-GB"), "/path1/key1", "1")); expected.add(new TranslationEntry(Locale.forLanguageTag("en-GB"), "/path1/path2/path3/key2", "2")); InputStream is = new ByteArrayInputStream(xml.getBytes(Charset.forName("UTF-8")));