This is an automated email from the ASF dual-hosted git repository. andy pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/jena.git
commit c92e74954d354cde1ab943384d765b012b339336 Author: Andy Seaborne <[email protected]> AuthorDate: Mon Mar 24 21:49:56 2025 +0000 GH-3093: Protect against bad IRIs --- .../main/java/org/apache/jena/riot/out/NodeFormatterTTL.java | 11 ++++++++--- .../java/org/apache/jena/riot/TestTurtleWriterPretty.java | 12 ++++++++++-- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/jena-arq/src/main/java/org/apache/jena/riot/out/NodeFormatterTTL.java b/jena-arq/src/main/java/org/apache/jena/riot/out/NodeFormatterTTL.java index ffdc3381d8..c149722b10 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/out/NodeFormatterTTL.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/out/NodeFormatterTTL.java @@ -102,9 +102,14 @@ public class NodeFormatterTTL extends NodeFormatterNT private String abbrevByBase(String uriStr) { if ( baseIRI == null ) return null; - IRIx relInput = IRIx.create(uriStr); - IRIx relativized = baseIRI.relativize(relInput); - return (relativized==null) ? null : relativized.toString(); + try { + IRIx relInput = IRIx.create(uriStr); + IRIx relativized = baseIRI.relativize(relInput); + return (relativized==null) ? null : relativized.toString(); + } catch (IRIException ex) { + // Bad IRI - print as is (and hope!) + return uriStr; + } } @Override diff --git a/jena-arq/src/test/java/org/apache/jena/riot/TestTurtleWriterPretty.java b/jena-arq/src/test/java/org/apache/jena/riot/TestTurtleWriterPretty.java index 9a09c13436..f2bd6256c1 100644 --- a/jena-arq/src/test/java/org/apache/jena/riot/TestTurtleWriterPretty.java +++ b/jena-arq/src/test/java/org/apache/jena/riot/TestTurtleWriterPretty.java @@ -25,13 +25,15 @@ import static org.junit.Assume.assumeTrue; import java.util.ArrayList; import java.util.List; -import org.apache.jena.graph.Graph; -import org.apache.jena.sparql.graph.GraphFactory; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; +import org.apache.jena.graph.Graph; +import org.apache.jena.sparql.graph.GraphFactory; +import org.apache.jena.sparql.sse.SSE; + /** Tests for Turtle and Trig pertty format */ @RunWith(Parameterized.class) public class TestTurtleWriterPretty { @@ -112,4 +114,10 @@ public class TestTurtleWriterPretty { assertFalse(g.isIsomorphicWith(g2)); } } + + @Test public void writer_baddata_iri_1() { + // SSE allows aweful IRIs! Good for test data ... + Graph g = SSE.parseGraph("(graph (:s :p <[[>))"); + String x = RDFWriter.source(g).base("http://example/").format(format).asString(); + } }
