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 <[email protected]> wrote: > Tracking here: https://issues.apache.org/jira/browse/LOG4J2-1260 > > Gary > > On Thu, Jan 21, 2016 at 9:55 AM, Gary Gregory <[email protected]> > 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 <[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 >> > > > > -- > 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
