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 18:09:46 GMT
Tracking here: https://issues.apache.org/jira/browse/LOG4J2-1260

Gary

On Thu, Jan 21, 2016 at 9:55 AM, Gary Gregory <garydgregory@gmail.com>
wrote:

> 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
>



-- 
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