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 <[email protected]> wrote: > Looks good to me! Thanks! > > > > > On 1/20/16, 9:30 PM, "Gary Gregory" <[email protected]> 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 <[email protected]> > >wrote: > > > >> And another issue: TlsSyslogFrame implements equals() but not > hashCode(). > >> > >> Gary > >> > >> On Wed, Jan 20, 2016 at 4:58 PM, Blake Day <[email protected]> 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: [email protected] > >>> For additional commands, e-mail: [email protected] > >>> > >>> > >> > >> > >> -- > >> E-Mail: [email protected] | [email protected] > >> 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: [email protected] | [email protected] > >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: [email protected] | [email protected] 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
