[jboss-jira] [JBoss JIRA] (LOGMGR-104) SyslogHandler doesn't handle multi-byte characters correctly

David Lloyd (JIRA) issues at jboss.org
Tue May 13 13:22:58 EDT 2014


    [ https://issues.jboss.org/browse/LOGMGR-104?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12967586#comment-12967586 ] 

David Lloyd commented on LOGMGR-104:
------------------------------------

Here's what should happen.

The loop should be rewritten to use codePointAt, which will completely eliminate surrogate issues.  The separate encode-to-byte[] should be removed in favor of two methods, one to return the byte length of the code point's UTF-8 encoding (which can then be checked against the remaining length) and one to write the encoded UTF-8 code point directly to the stream.

> SyslogHandler doesn't handle multi-byte characters correctly
> ------------------------------------------------------------
>
>                 Key: LOGMGR-104
>                 URL: https://issues.jboss.org/browse/LOGMGR-104
>             Project: JBoss Log Manager
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>          Components: core
>    Affects Versions: 1.5.2.Final
>         Environment: - WildFly 8.0.0.Final
> - Oracle JDK7u51
> - OS X 10.9.2
>            Reporter: Kyle Shanahan
>            Assignee: James Perkins
>         Attachments: corrupted.png, corrupted2.png, corrupted3.png
>
>
> SyslogHandler doesn't handle multi-byte characters correctly.
> I tried to log multi-byte message with both of org.jboss.logmanager.handlers.SyslogHandler and org.apache.log4j.net.SyslogAppender for same message, only SyslogHandler output were corrupted.
> Step to reproduce (It might need to define -Dfile.encoding=UTF-8 in _JAVA_OPTIONS): 
> 1. define a facility local1 at localhost and make syslog accept UDP packets.
> 2. define a logger:
> {noformat}
> /subsystem=logging/logger=utf8mb4log:add(level=INFO)
> {noformat}
> 3. define a SyslogHandler:
> {noformat}
> /subsystem=logging/custom-handler=TEST_SH:add(class="org.jboss.logmanager.handlers.SyslogHandler", module="org.jboss.logmanager", formatter="SyslogHandler: %s%e", level=INFO, properties={serverHostname="localhost:514", facility="LOCAL_USE_1", truncate=false, maxLength=1024, syslogType="RFC3164" })
> /subsystem=logging/logger=utf8mb4log:assign-handler(name=TEST_SH)
> {noformat}
> 4. define a SyslogAppender:
> {noformat}
> /subsystem=logging/custom-handler=TEST_LOG4J:add(class="org.apache.log4j.net.SyslogAppender", module="org.apache.log4j", formatter="log4j: %s%e", level=INFO, properties={syslogHost="localhost:514", facility="local1"})
> /subsystem=logging/logger=utf8mb4log:assign-handler(name=TEST_LOG4J)
> {noformat}
> 5. get and deploy example project at https://github.com/lbtc-xxx/utf8mb4log
> 6. Access the servlet http://localhost:8080/utf8mb4log/
> And you will get like this: (I can't put 4 byte UTF-8 characters here... because  database error occured):
> {noformat}
> Mar  8 17:29:09 UNKNOWN_HOSTNAME java[9896]: SyslogHandler: ????????????
> {noformat}
> I would send a pull request later.



--
This message was sent by Atlassian JIRA
(v6.2.3#6260)


More information about the jboss-jira mailing list