logging-log4j-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Blake Day <bl...@chewy.com>
Subject Re: TlsSyslogFrame calculates message length incorrectly
Date Thu, 21 Jan 2016 17:51:57 GMT
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
Mime
View raw message