Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
Merge pull request #118 from zanata/handle-invalid-tmx
Browse files Browse the repository at this point in the history
rhbz995909 Add better error checking when importing invalid TMX files
  • Loading branch information
Patrick Huang committed Aug 12, 2013
2 parents 5871c63 + 1f078cf commit eefd6fd
Show file tree
Hide file tree
Showing 9 changed files with 49 additions and 6 deletions.
Expand Up @@ -46,8 +46,6 @@
import org.zanata.util.DateUtil;
import org.zanata.util.UrlUtil;

import com.ctc.wstx.util.URLUtil;

@Name("dashboardAction")
@Scope(ScopeType.PAGE)
public class DashboardAction implements Serializable
Expand Down
8 changes: 7 additions & 1 deletion zanata-war/src/main/java/org/zanata/tmx/TMXParser.java
Expand Up @@ -92,9 +92,15 @@ public void parseAndSaveTMX(InputStream input, TransMemory transMemory)
@Cleanup
XMLStreamReader reader = factory.createXMLStreamReader(input);

QName tu = new QName("tu");
QName tmx = new QName("tmx");
QName header = new QName("header");
QName tu = new QName("tu");

while (reader.hasNext() && reader.next() != XMLStreamConstants.START_ELEMENT) {}
if (!reader.hasNext()) throw new TMXParseException("No root element");
if (!reader.getName().equals(tmx)) throw new TMXParseException("Wrong root element: expected tmx");

// At this point, event = START_ELEMENT and name = tmx
while (reader.hasNext())
{
int eventType = reader.next();
Expand Down
4 changes: 2 additions & 2 deletions zanata-war/src/main/java/org/zanata/xml/TmxDtdResolver.java
Expand Up @@ -55,7 +55,7 @@ public Object resolveEntity(String publicID, String systemID, String baseURI, St
}
else
{
return null;
throw new XMLStreamException("Invalid TMX document: expected tmx14.dtd");
}
}

Expand All @@ -69,7 +69,7 @@ public InputSource resolveEntity(String publicId, String systemId) throws SAXExc
}
else
{
return null;
throw new SAXException("Invalid TMX document: expected tmx14.dtd");
}
}

Expand Down
Expand Up @@ -174,7 +174,7 @@ private Document writeToXmlWithValidation(StreamingOutput output) throws IOExcep
private void assertValidTMX(String xml) throws MalformedURLException, SAXException
{
StringReader reader = new StringReader(xml);
String systemID = getClass().getResource("/org/zanata/xml/tmx14.dtd").toString();
String systemID = org.zanata.xml.TmxDtdResolver.class.getResource("/org/zanata/xml/tmx14.dtd").toString();
String doctype = "tmx";
Validator v = new Validator(reader, systemID, doctype);
assertTrue(v.toString(), v.isValid());
Expand Down
28 changes: 28 additions & 0 deletions zanata-war/src/test/java/org/zanata/tmx/TMXParserTest.java
Expand Up @@ -112,6 +112,34 @@ public boolean evaluate(Object o)
});
}

@Test(expectedExceptions = TMXParseException.class, expectedExceptionsMessageRegExp=".*Wrong root element.*")
@org.junit.Test(expected = TMXParseException.class)
public void parseInvalidXML() throws Exception
{
createTMFromFile("/tmx/invalid.xml");
}

@Test(expectedExceptions = TMXParseException.class)
@org.junit.Test(expected = TMXParseException.class)
public void parseEmptyTXT() throws Exception
{
createTMFromFile("/tmx/empty.txt");
}

@Test(expectedExceptions = TMXParseException.class)
@org.junit.Test(expected = TMXParseException.class)
public void parseInvalidTXT() throws Exception
{
createTMFromFile("/tmx/invalid.txt");
}

@Test(expectedExceptions = TMXParseException.class, expectedExceptionsMessageRegExp=".*Invalid TMX document.*")
@org.junit.Test(expected = TMXParseException.class)
public void parseInvalidHTML() throws Exception
{
createTMFromFile("/tmx/invalid.xhtml");
}

@Test
@org.junit.Test
public void parseTMX() throws Exception
Expand Down
Empty file.
1 change: 1 addition & 0 deletions zanata-war/src/test/resources/tmx/invalid.txt
@@ -0,0 +1 @@
This is just a text file, instead of a TMX file.
6 changes: 6 additions & 0 deletions zanata-war/src/test/resources/tmx/invalid.xhtml
@@ -0,0 +1,6 @@
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head></head>
<body></body>
</html>
4 changes: 4 additions & 0 deletions zanata-war/src/test/resources/tmx/invalid.xml
@@ -0,0 +1,4 @@
<not-tmx>
<tag1></tag1>
<tag2></tag2>
</not-tmx>

0 comments on commit eefd6fd

Please sign in to comment.