logging-log4j-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gary Gregory <garydgreg...@gmail.com>
Subject Re: TlsSyslogFrame calculates message length incorrectly
Date Thu, 21 Jan 2016 17:55:44 GMT
Blake:

Did you try to apply the patch and run with it? Our unit tests pass when I
have the patch but it's not guarantee in comparison to a real live use-case.

Gary

On Thu, Jan 21, 2016 at 9:51 AM, Blake Day <blake@chewy.com> wrote:

> Looks good to me!  Thanks!
>
>
>
>
> On 1/20/16, 9:30 PM, "Gary Gregory" <garydgregory@gmail.com> wrote:
>
> >How about something like this:
> >
> >diff --git
>
> >a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/TlsSyslogFrame.java
>
> >b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/TlsSyslogFrame.java
> >index a48876f..d6e77ef 100644
> >---
>
> >a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/TlsSyslogFrame.java
> >+++
>
> >b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/TlsSyslogFrame.java
> >@@ -16,7 +16,7 @@
> >  */
> > package org.apache.logging.log4j.core.appender;
> >
> >-import java.nio.charset.Charset;
> >+import java.nio.charset.StandardCharsets;
> >
> > import org.apache.logging.log4j.util.Chars;
> >
> >@@ -26,46 +26,56 @@
> >  * @see <a href="https://tools.ietf.org/html/rfc5425">RFC 5425</a>
> >  */
> > public class TlsSyslogFrame {
> >-    private String message;
> >-    private int messageLengthInBytes;
> >+    private final String message;
> >
> >     public TlsSyslogFrame(final String message) {
> >-        setMessage(message);
> >+        this.message = message;
> >     }
> >
> >     public String getMessage() {
> >         return this.message;
> >     }
> >
> >-    public void setMessage(final String message) {
> >-        this.message = message;
> >-        setLengthInBytes();
> >-    }
> >-
> >-    private void setLengthInBytes() {
> >-        messageLengthInBytes = message.length();
> >-    }
> >-
> >     public byte[] getBytes() {
> >-        final String frame = toString();
> >-        return frame.getBytes(Charset.defaultCharset());
> >+        final String frame = toString();
> >+        return frame.getBytes(StandardCharsets.UTF_8);
> >     }
> >
> >     @Override
> >     public String toString() {
> >-        final String length = Integer.toString(messageLengthInBytes);
> >+        final byte[] messageBytes =
> >message.getBytes(StandardCharsets.UTF_8);
> >+        final String length = Integer.toString(messageBytes.length);
> >         return length + Chars.SPACE + message;
> >     }
> >
> >-    public boolean equals(final TlsSyslogFrame frame) {
> >-        return isLengthEquals(frame) && isMessageEquals(frame);
> >+    @Override
> >+    public int hashCode() {
> >+        final int prime = 31;
> >+        int result = 1;
> >+        result = prime * result + ((message == null) ? 0 :
> >message.hashCode());
> >+        return result;
> >     }
> >
> >-    private boolean isLengthEquals(final TlsSyslogFrame frame) {
> >-        return this.messageLengthInBytes == frame.messageLengthInBytes;
> >+    @Override
> >+    public boolean equals(final Object obj) {
> >+        if (this == obj) {
> >+            return true;
> >+        }
> >+        if (obj == null) {
> >+            return false;
> >+        }
> >+        if (!(obj instanceof TlsSyslogFrame)) {
> >+            return false;
> >+        }
> >+        final TlsSyslogFrame other = (TlsSyslogFrame) obj;
> >+        if (message == null) {
> >+            if (other.message != null) {
> >+                return false;
> >+            }
> >+        } else if (!message.equals(other.message)) {
> >+            return false;
> >+        }
> >+        return true;
> >     }
> >
> >-    private boolean isMessageEquals(final TlsSyslogFrame frame) {
> >-        return this.message.equals(frame.message);
> >-    }
> > }
> >
> >
> >Gary
> >
> >On Wed, Jan 20, 2016 at 6:27 PM, Gary Gregory <garydgregory@gmail.com>
> >wrote:
> >
> >> And another issue: TlsSyslogFrame implements equals() but not
> hashCode().
> >>
> >> Gary
> >>
> >> On Wed, Jan 20, 2016 at 4:58 PM, Blake Day <blake@chewy.com> wrote:
> >>
> >>> TlsSyslogFrame appears to be miscalculating the message length.
> >>> According to RFC5425, the message length must be the octet count of the
> >>> SYSLOG-MSG in the frame.  Though the variable below is aptly named
> >>> messageLengthInBytes, it is assigned the value from message.length()
> (where
> >>> message is a String) rather than the bytes.
> >>>
> >>> See below for relevant portions of code:
> >>>
> >>> private String message;
> >>> private int messageLengthInBytes;
> >>>
> >>> private void setLengthInBytes() {
> >>>     messageLengthInBytes = message.length();
> >>> }
> >>>
> >>> @Override
> >>> public String toString() {
> >>>     final String length = Integer.toString(messageLengthInBytes);
> >>>     return length + Chars.SPACE + message;
> >>> }
> >>>
> >>>
> >>>
> >>>
> >>> ---------------------------------------------------------------------
> >>> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> >>> For additional commands, e-mail: log4j-user-help@logging.apache.org
> >>>
> >>>
> >>
> >>
> >> --
> >> E-Mail: garydgregory@gmail.com | ggregory@apache.org
> >> Java Persistence with Hibernate, Second Edition
> >> <http://www.manning.com/bauer3/>
> >> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
> >> Spring Batch in Action <http://www.manning.com/templier/>
> >> Blog: http://garygregory.wordpress.com
> >> Home: http://garygregory.com/
> >> Tweet! http://twitter.com/GaryGregory
> >>
> >
> >
> >
> >--
> >E-Mail: garydgregory@gmail.com | ggregory@apache.org
> >Java Persistence with Hibernate, Second Edition
> ><http://www.manning.com/bauer3/>
> >JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
> >Spring Batch in Action <http://www.manning.com/templier/>
> >Blog: http://garygregory.wordpress.com
> >Home: http://garygregory.com/
> >Tweet! http://twitter.com/GaryGregory
>



-- 
E-Mail: garydgregory@gmail.com | ggregory@apache.org
Java Persistence with Hibernate, Second Edition
<http://www.manning.com/bauer3/>
JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
Spring Batch in Action <http://www.manning.com/templier/>
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message