afs/rdf-delta

ArrayIndexOutOfBoundsException when creating large patches.

Closed this issue · 1 comments

The underlying error has already been reported to Jena as JENA-1919, but I thought it best to record here as well given this is where the issue was uncovered.

When attempting to send a large patch where a character set is larger than 8192 characters rdf2patch will throw an ArrayIndexOutofBoundsException.

Converting the attached file large_buffer.ttl.txt (attached as .txt for upload purposes)

dcmd r2p large_buffer.ttl

Which will result in

java.lang.ArrayIndexOutOfBoundsException: 8192
	at org.apache.jena.atlas.io.BufferingWriter.output(BufferingWriter.java:130)
	at org.apache.jena.atlas.io.BufferingWriter.write(BufferingWriter.java:178)
	at org.apache.jena.atlas.io.Writer2.print(Writer2.java:49)
	at org.apache.jena.atlas.lib.EscapeStr.stringEsc(EscapeStr.java:106)
	at org.apache.jena.riot.out.quoted.QuotedStringOutputBase.writeStr(QuotedStringOutputBase.java:42)
	at org.apache.jena.riot.out.NodeFormatterNT.writeEscaped(NodeFormatterNT.java:68)
	at org.apache.jena.riot.out.NodeFormatterNT.formatLitLang(NodeFormatterNT.java:73)
	at org.apache.jena.riot.out.NodeFormatterBase.formatLiteral(NodeFormatterBase.java:64)
	at org.apache.jena.riot.out.NodeFormatterBase.format(NodeFormatterBase.java:41)
	at org.seaborne.patch.text.TokenWriterText$NodeFormatterWrapper.format(TokenWriterText.java:157)
	at org.seaborne.patch.text.TokenWriterText$NodeFormatterBNode.format(TokenWriterText.java:132)
	at org.seaborne.patch.text.TokenWriterText.sendNode(TokenWriterText.java:220)
	at org.seaborne.patch.changes.RDFChangesWriter.output(RDFChangesWriter.java:86)
	at org.seaborne.patch.changes.RDFChangesWriter.output(RDFChangesWriter.java:78)
	at org.seaborne.patch.changes.RDFChangesWriter.add(RDFChangesWriter.java:70)
	at org.seaborne.patch.StreamPatch.triple(StreamPatch.java:64)
	at org.apache.jena.riot.lang.LangTurtle.emit(LangTurtle.java:57)
	at org.apache.jena.riot.lang.LangTurtleBase.emitTriple(LangTurtleBase.java:486)
	at org.apache.jena.riot.lang.LangTurtleBase.objectList(LangTurtleBase.java:352)
	at org.apache.jena.riot.lang.LangTurtleBase.predicateObjectItem(LangTurtleBase.java:288)
	at org.apache.jena.riot.lang.LangTurtleBase.predicateObjectList(LangTurtleBase.java:269)
	at org.apache.jena.riot.lang.LangTurtleBase.triples(LangTurtleBase.java:250)
	at org.apache.jena.riot.lang.LangTurtleBase.triplesSameSubject(LangTurtleBase.java:191)
	at org.apache.jena.riot.lang.LangTurtle.oneTopLevelElement(LangTurtle.java:46)
	at org.apache.jena.riot.lang.LangTurtleBase.runParser(LangTurtleBase.java:91)
	at org.apache.jena.riot.lang.LangBase.parse(LangBase.java:41)
	at org.apache.jena.riot.RDFParserRegistry$ReaderRIOTLang.read(RDFParserRegistry.java:191)
	at org.apache.jena.riot.RDFParser.read(RDFParser.java:352)
	at org.apache.jena.riot.RDFParser.parseURI(RDFParser.java:321)
	at org.apache.jena.riot.RDFParser.parse(RDFParser.java:295)
	at org.apache.jena.riot.RDFParserBuilder.parse(RDFParserBuilder.java:506)
	at org.apache.jena.riot.RDFDataMgr.parseFromURI(RDFDataMgr.java:890)
	at org.apache.jena.riot.RDFDataMgr.parse(RDFDataMgr.java:680)
	at org.apache.jena.riot.RDFDataMgr.parse(RDFDataMgr.java:649)
	at org.apache.jena.riot.RDFDataMgr.parse(RDFDataMgr.java:637)
	at org.apache.jena.riot.RDFDataMgr.parse(RDFDataMgr.java:625)
	at org.seaborne.delta.cmds.rdf2patch.lambda$exec$0(rdf2patch.java:60)
	at java.util.ArrayList.forEach(ArrayList.java:1257)
	at org.seaborne.delta.cmds.rdf2patch.exec(rdf2patch.java:60)
	at jena.cmd.CmdMain.mainMethod(CmdMain.java:93)
	at jena.cmd.CmdMain.mainRun(CmdMain.java:58)
	at jena.cmd.CmdMain.mainRun(CmdMain.java:45)
	at org.seaborne.delta.cmds.rdf2patch.main(rdf2patch.java:35)
	at org.seaborne.delta.cmds.dcmd.main(dcmd.java:130)
	at dcmd.main(dcmd.java:38)
afs commented

See comment on #15. This and that got fixed in the same jena PR: apache/jena/pull#762.

I'll close this issue but leave #15 open if that's OK.