From 6713d15b50ac2a55d4c630786fae499adc4ac893 Mon Sep 17 00:00:00 2001 From: Otto Fowler Date: Sat, 17 May 2025 11:02:50 -0400 Subject: [PATCH 1/2] fix(grammar): add handling for accepting spaces in msg and errors when spaces in other places --- .../syslog/dsl/Syslog5424Listener.java | 24 ++++++++----- .../syslog/Rfc5424SyslogParserTest.java | 35 ++++++++++++++++++- src/test/resources/logs/5424/log_atna.txt | 1 + .../logs/5424/log_invalid_whitespaces.txt | 18 ++++++++++ 4 files changed, 69 insertions(+), 9 deletions(-) create mode 100644 src/test/resources/logs/5424/log_atna.txt create mode 100644 src/test/resources/logs/5424/log_invalid_whitespaces.txt diff --git a/src/main/java/com/github/palindromicity/syslog/dsl/Syslog5424Listener.java b/src/main/java/com/github/palindromicity/syslog/dsl/Syslog5424Listener.java index 18d5012..67c8ec2 100644 --- a/src/main/java/com/github/palindromicity/syslog/dsl/Syslog5424Listener.java +++ b/src/main/java/com/github/palindromicity/syslog/dsl/Syslog5424Listener.java @@ -54,12 +54,15 @@ public Syslog5424Listener(SyslogMessageConsumer syslogBuilder) { public void exitHeaderPriorityValue(Rfc5424Parser.HeaderPriorityValueContext ctx) { String priority = ctx.getText(); syslogBuilder.consumeValue(SyslogFieldKeys.HEADER_PRI, priority); - - int pri = Integer.parseInt(priority); - int sev = pri % 8; - int facility = pri / 8; - syslogBuilder.consumeValue(SyslogFieldKeys.HEADER_PRI_SEVERITY, String.valueOf(sev)); - syslogBuilder.consumeValue(SyslogFieldKeys.HEADER_PRI_FACILITY, String.valueOf(facility)); + try { + int pri = Integer.parseInt(priority); + int sev = pri % 8; + int facility = pri / 8; + syslogBuilder.consumeValue(SyslogFieldKeys.HEADER_PRI_SEVERITY, String.valueOf(sev)); + syslogBuilder.consumeValue(SyslogFieldKeys.HEADER_PRI_FACILITY, String.valueOf(facility)); + } catch (NumberFormatException e) { + throw new ParseException("Invalid priority: " + priority, e); + } } @Override @@ -109,8 +112,13 @@ public void exitHeaderNilMsgId(Rfc5424Parser.HeaderNilMsgIdContext ctx) { @Override public void exitHeaderTimeStamp(Rfc5424Parser.HeaderTimeStampContext ctx) { - syslogBuilder.consumeValue(SyslogFieldKeys.HEADER_TIMESTAMP, - ctx.full_date().getText() + "T" + ctx.full_time().getText()); + String txt = null; + try { + txt = ctx.full_date().getText() + "T" + ctx.full_time().getText(); + } catch (NullPointerException e) { + throw new ParseException("Invalid TimeStamp", e); + } + syslogBuilder.consumeValue(SyslogFieldKeys.HEADER_TIMESTAMP, txt); } @Override diff --git a/src/test/java/com/github/palindromicity/syslog/Rfc5424SyslogParserTest.java b/src/test/java/com/github/palindromicity/syslog/Rfc5424SyslogParserTest.java index b971b89..025c8a1 100644 --- a/src/test/java/com/github/palindromicity/syslog/Rfc5424SyslogParserTest.java +++ b/src/test/java/com/github/palindromicity/syslog/Rfc5424SyslogParserTest.java @@ -16,6 +16,9 @@ package com.github.palindromicity.syslog; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.EnumSet; import java.util.List; import java.util.Map; @@ -454,9 +457,39 @@ public void testInvalidLineConsumer() throws Exception { @Test public void testParseLinesMissingStructure() throws Exception { - SyslogParser parser = new SyslogParserBuilder().forSpecification(SyslogSpecification.HEROKU_HTTPS_LOG_DRAIN).withSyslogBuilder(new MapOfMaps5424MessageHandler()).build(); + SyslogParser> parser = new SyslogParserBuilder>().forSpecification(SyslogSpecification.HEROKU_HTTPS_LOG_DRAIN).withSyslogBuilder(new MapOfMaps5424MessageHandler()).build(); List> mapList = handleFile("src/test/resources/logs/5424/log_missing_structure.txt", parser); Assert.assertEquals(1, mapList.size()); } + + @Test + public void testParseLineAtna() throws Exception { + final SyslogParser> parser = new SyslogParserBuilder>().withSyslogBuilder(new MapOfMaps5424MessageHandler()).build(); + final List> mapList = handleFile("src/test/resources/logs/5424/log_atna.txt", parser); + Assert.assertEquals(1, mapList.size()); + final Map map = mapList.get(0); + + final String message = (String) map.get(SyslogFieldKeys.MESSAGE.getField()); + Assert.assertNotNull(message); + // Multiple whitespaces should be kept + Assert.assertTrue(message.contains(" ")); + Assert.assertFalse(message.contains("=\"0\"Event")); + } + + @Test + public void testParseLinesWithInvalidWhitespaces() throws Exception { + final SyslogParser> parser = new SyslogParserBuilder>().withSyslogBuilder(new MapOfMaps5424MessageHandler()).build(); + final Path path = Paths.get("src/test/resources/logs/5424/log_invalid_whitespaces.txt"); + final List lines = Files.readAllLines(path); + + for (final String line : lines) { + try { + handleLine(line, parser); + Assert.fail("The parsing of the invalid line should have failed: " + line); + } catch (final Exception e) { + Assert.assertTrue(e instanceof ParseException); + } + } + } } \ No newline at end of file diff --git a/src/test/resources/logs/5424/log_atna.txt b/src/test/resources/logs/5424/log_atna.txt new file mode 100644 index 0000000..f297d0b --- /dev/null +++ b/src/test/resources/logs/5424/log_atna.txt @@ -0,0 +1 @@ +<85>1 2025-05-17T10:54:32Z client.localhost IkitIntegrationTestApp 42 IHE+RFC-3881 -  \ No newline at end of file diff --git a/src/test/resources/logs/5424/log_invalid_whitespaces.txt b/src/test/resources/logs/5424/log_invalid_whitespaces.txt new file mode 100644 index 0000000..c3c8d1a --- /dev/null +++ b/src/test/resources/logs/5424/log_invalid_whitespaces.txt @@ -0,0 +1,18 @@ +<8 5>1 2025-05-17T10:54:32Z client.localhost IkitIntegrationTestApp 42 IHE+RFC-3881 - Hello +<85>1 202 5-05-17T1 0:54:32Z client.localhost IkitIntegrationTestApp 42 IHE+RFC-3881 - Hello +<85>1 2025-05-17T10:54:32Z clie nt.localhost IkitIntegrationTestApp 42 IHE+RFC-3881 - Hello +<85>1 2025-05-17T10:54:32Z client.localhost IkitIntegratio nTestApp 42 IHE+RFC-3881 - Hello +<85>1 2025-05-17T10:54:32Z client.localhost IkitIntegrationTestApp 4 2 IHE+RFC-3881 - Hello +<85>1 2025-05-17T10:54:32Z client.localhost IkitIntegrationTestApp 42 IHE+RF C-3881 - Hello +<8 5>1 2025-05-17T10:54:32Z client.localhost IkitIntegrationTestApp 42 IHE+RFC-3881 - Hello +<85>1 202 5-05-17T1 0:54:32Z client.localhost IkitIntegrationTestApp 42 IHE+RFC-3881 - Hello +<85>1 2025-05-17T10:54:32Z clie nt.localhost IkitIntegrationTestApp 42 IHE+RFC-3881 - Hello +<85>1 2025-05-17T10:54:32Z client.localhost IkitIntegratio nTestApp 42 IHE+RFC-3881 - Hello +<85>1 2025-05-17T10:54:32Z client.localhost IkitIntegrationTestApp 4 2 IHE+RFC-3881 - Hello +<85>1 2025-05-17T10:54:32Z client.localhost IkitIntegrationTestApp 42 IHE+RF C-3881 - Hello +<8 5>1 2025-05-17T10:54:32Z client.localhost IkitIntegrationTestApp 42 IHE+RFC-3881 - Hello +<85>1 2025 -05-17T10:54:32Z client.localhost IkitIntegrationTestApp 42 IHE+RFC-3881 - Hello +<85>1 2025-05-17T10:54:32Z client.loca lhost IkitIntegrationTestApp 42 IHE+RFC-3881 - Hello +<85>1 2025-05-17T10:54:32Z client.localhost IkitIntegrat ionTestApp 42 IHE+RFC-3881 - Hello +<85>1 2025-05-17T10:54:32Z client.localhost IkitIntegrationTestApp 4 2 IHE+RFC-3881 - Hello +<85>1 2025-05-17T10:54:32Z client.localhost IkitIntegrationTestApp 42 IHE+ RFC-3881 - Hello \ No newline at end of file From f886fba5b6b9422be3402ce6e9e80771fedafc5f Mon Sep 17 00:00:00 2001 From: Otto Fowler Date: Sat, 17 May 2025 11:06:12 -0400 Subject: [PATCH 2/2] fix(ci): remove java 8 and add java 21 --- .github/workflows/ci.yml | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f3b6225..f9865db 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,10 +1,9 @@ name: Java CI with Maven on: [push, pull_request] - + jobs: ubuntu-adopt-jdk-11: - runs-on: ubuntu-latest steps: @@ -12,38 +11,36 @@ jobs: - name: Set up JDK 11 uses: actions/setup-java@v3 with: - java-version: '11' - distribution: 'adopt' + java-version: "11" + distribution: "adopt" cache: maven - name: Build with Maven run: mvn package --file pom.xml - ubuntu-adopt-jdk-8: - + ubuntu-adopt-jdk-17: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - name: Set up JDK 8 + - name: Set up JDK 17 uses: actions/setup-java@v3 with: - java-version: '8' - distribution: 'adopt' + java-version: "17" + distribution: "adopt" cache: maven - name: Build with Maven run: mvn package --file pom.xml - ubuntu-adopt-jdk-17: - + ubuntu-adopt-jdk-21: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - name: Set up JDK 17 + - name: Set up JDK 21 uses: actions/setup-java@v3 with: - java-version: '17' - distribution: 'adopt' + java-version: "21" + distribution: "adopt" cache: maven - name: Build with Maven run: mvn package --file pom.xml