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 19:03:42 GMT
You can also test a SNAPSHOT build from
https://repository.apache.org/content/repositories/snapshots/

Gary

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

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



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