From 91557d687fa89f9cfcc1d38a0a38a3bd84625b5d Mon Sep 17 00:00:00 2001 From: Bernd Ahlers Date: Fri, 22 May 2015 18:21:07 +0200 Subject: [PATCH] Fix parsing of empty RFC5424 structured data in a message. Refs Graylog2/graylog2-server#1161. --- .../message/structured/StructuredSyslogMessage.java | 11 +++++++++++ .../structured/StructuredSyslogServerEventTest.java | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/graylog2/syslog4j/impl/message/structured/StructuredSyslogMessage.java b/src/main/java/org/graylog2/syslog4j/impl/message/structured/StructuredSyslogMessage.java index 0219a5e..1235c48 100644 --- a/src/main/java/org/graylog2/syslog4j/impl/message/structured/StructuredSyslogMessage.java +++ b/src/main/java/org/graylog2/syslog4j/impl/message/structured/StructuredSyslogMessage.java @@ -31,6 +31,9 @@ import java.util.Set; * @version $Id: StructuredSyslogMessage.java,v 1.5 2010/09/11 16:49:24 cvs Exp $ */ public class StructuredSyslogMessage extends AbstractSyslogMessage implements StructuredSyslogMessageIF { + public static final String EMPTY_STRUCTURED_DATA_PREFIX = "- - "; + public static final int EMPTY_STRUCTURED_DATA_PREFIX_LENGTH = EMPTY_STRUCTURED_DATA_PREFIX.length(); + private String messageId; private Map> structuredData; private String message; @@ -84,6 +87,14 @@ public class StructuredSyslogMessage extends AbstractSyslogMessage implements St private void deserialize(final String stringMessage) { + // Check if the RFC5424 MSGID and STRUCTURED-DATA fields are empty. + // This avoids throwing an exception and also strips the "- - " from the message. + // See: https://github.com/Graylog2/graylog2-server/issues/1161 + if (stringMessage.startsWith(EMPTY_STRUCTURED_DATA_PREFIX)) { + this.message = stringMessage.substring(EMPTY_STRUCTURED_DATA_PREFIX_LENGTH); + return; + } + int start = stringMessage.indexOf('['); int end = -1; diff --git a/src/test/java/org/graylog2/syslog4j/server/impl/event/structured/StructuredSyslogServerEventTest.java b/src/test/java/org/graylog2/syslog4j/server/impl/event/structured/StructuredSyslogServerEventTest.java index 8643d85..4ebfeb3 100644 --- a/src/test/java/org/graylog2/syslog4j/server/impl/event/structured/StructuredSyslogServerEventTest.java +++ b/src/test/java/org/graylog2/syslog4j/server/impl/event/structured/StructuredSyslogServerEventTest.java @@ -101,7 +101,7 @@ public class StructuredSyslogServerEventTest { assertEquals(null, event.getStructuredMessage().getStructuredData()); assertEquals(null, event.getStructuredMessage().getMessageId()); - assertEquals("- - tralala", event.getStructuredMessage().getMessage()); + assertEquals("tralala", event.getStructuredMessage().getMessage()); } @Test @@ -160,7 +160,7 @@ public class StructuredSyslogServerEventTest { assertEquals(null, event.getStructuredMessage().getStructuredData()); assertEquals(null, event.getStructuredMessage().getMessageId()); - assertEquals("- - %% It's time to make the do-nuts.", event.getStructuredMessage().getMessage()); + assertEquals("%% It's time to make the do-nuts.", event.getStructuredMessage().getMessage()); } @Test