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();
+    }
 }

Reply via email to