From 8d54a9f59e23bef7e679e9141b60a4efcce3af25 Mon Sep 17 00:00:00 2001 From: Jesper Zedlitz <jesper@zedlitz.de> Date: Wed, 15 Dec 2021 07:58:56 +0100 Subject: [PATCH] handle consecutive empty lines correctly --- .../catalogproxy/FilterInvalidRDF.java | 21 +++++++------ .../catalogproxy/FilterInvalidRDFTest.java | 30 +++++++++++++++++-- 2 files changed, 38 insertions(+), 13 deletions(-) diff --git a/src/main/java/de/landsh/opendata/catalogproxy/FilterInvalidRDF.java b/src/main/java/de/landsh/opendata/catalogproxy/FilterInvalidRDF.java index 3507515..0b90295 100644 --- a/src/main/java/de/landsh/opendata/catalogproxy/FilterInvalidRDF.java +++ b/src/main/java/de/landsh/opendata/catalogproxy/FilterInvalidRDF.java @@ -31,13 +31,13 @@ public class FilterInvalidRDF extends InputStream { String[] fragments = line.split("&"); for (int i = 1; i < fragments.length; i++) { String fragment = fragments[i]; - if( !(fragment.startsWith("#") || fragment.startsWith("amp") || fragment.startsWith("apos") - || fragment.startsWith("quot") || fragment.startsWith("lt")|| fragment.startsWith("gt"))) { + if (!(fragment.startsWith("#") || fragment.startsWith("amp") || fragment.startsWith("apos") + || fragment.startsWith("quot") || fragment.startsWith("lt") || fragment.startsWith("gt"))) { // invalid character entity reference - fragments[i] = "amp;"+ fragment; + fragments[i] = "amp;" + fragment; } } - line = StringUtils.join(fragments,"&"); + line = StringUtils.join(fragments, "&"); } String before = null; @@ -84,12 +84,6 @@ public class FilterInvalidRDF extends InputStream { return -1; } - // insert a newline character at the end of each line - if (index == currentLine.length) { - index++; - return '\n'; - } - if (index > currentLine.length) { readNextLine(); } @@ -97,7 +91,12 @@ public class FilterInvalidRDF extends InputStream { if (currentLine == null) { return -1; } - + // insert a newline character at the end of each line + if (index == currentLine.length) { + index++; + return '\n'; + } + byte result = currentLine[index]; index++; return result; diff --git a/src/test/java/de/landsh/opendata/catalogproxy/FilterInvalidRDFTest.java b/src/test/java/de/landsh/opendata/catalogproxy/FilterInvalidRDFTest.java index f188d81..44d3600 100644 --- a/src/test/java/de/landsh/opendata/catalogproxy/FilterInvalidRDFTest.java +++ b/src/test/java/de/landsh/opendata/catalogproxy/FilterInvalidRDFTest.java @@ -3,6 +3,7 @@ package de.landsh.opendata.catalogproxy; import org.apache.commons.io.IOUtils; import org.junit.jupiter.api.Test; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; @@ -21,6 +22,32 @@ public class FilterInvalidRDFTest { assertEquals(expectedResult, result); } + @Test + public void read_empty_stream() throws IOException { + InputStream inputStream = new FilterInvalidRDF(new ByteArrayInputStream(new byte[0])); + assertEquals(-1, inputStream.read()); + } + + @Test + public void read_empty_line() throws IOException { + InputStream inputStream = new FilterInvalidRDF(new ByteArrayInputStream("\n".getBytes())); + String result = IOUtils.toString(inputStream, StandardCharsets.UTF_8); + assertEquals("\n", result); + } + @Test + public void read_empty_lines() throws IOException { + InputStream inputStream = new FilterInvalidRDF(new ByteArrayInputStream("\n\n\n".getBytes())); + String result = IOUtils.toString(inputStream, StandardCharsets.UTF_8); + assertEquals("\n\n\n", result); + } + + @Test + public void read_no_newline() throws IOException { + InputStream inputStream = new FilterInvalidRDF(new ByteArrayInputStream("OK".getBytes())); + String result = IOUtils.toString(inputStream, StandardCharsets.UTF_8); + assertEquals("OK\n", result); + } + @Test public void read_iri_with_space() throws IOException { final String invalidIRI = "\"https://opendata.schleswig-holstein.de/dataset/automatische-zahlstelle-neustadt i. h.-süd-2012\""; @@ -30,7 +57,7 @@ public class FilterInvalidRDFTest { final String correctedURL = "https://www.bast.de/DE/Verkehrstechnik/Fachthemen/v2-verkehrszaehlung/Aktuell/zaehl_aktuell_node.html?nn=1819516&cms_detail=1105&cms_map=0"; String expectedResult = IOUtils.toString(getClass().getResourceAsStream("/invalid_iri.xml"), StandardCharsets.UTF_8) - .replace(invalidIRI,correctedIRI) + .replace(invalidIRI, correctedIRI) .replace(invalidURL, correctedURL); InputStream inputStream = new FilterInvalidRDF(getClass().getResourceAsStream("/invalid_iri.xml")); @@ -59,6 +86,5 @@ public class FilterInvalidRDFTest { @Test public void filterLine_invalid_xml_entity() { assertEquals("?nn=1819516&cms_detail=1105&cms_map=0", FilterInvalidRDF.filterLine("?nn=1819516&cms_detail=1105&cms_map=0")); - } } -- GitLab