[ 
https://issues.apache.org/jira/browse/DIRMINA-904?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13434038#comment-13434038
 ] 

Emmanuel Lecharny commented on DIRMINA-904:
-------------------------------------------

I have a patch that fixes this behavior :


### Eclipse Workspace Patch 1.0
#P mina-core-2.0.5
Index: src/main/java/org/apache/mina/filter/codec/textline/TextLineDecoder.java
===================================================================
--- src/main/java/org/apache/mina/filter/codec/textline/TextLineDecoder.java    
(revision 1369898)
+++ src/main/java/org/apache/mina/filter/codec/textline/TextLineDecoder.java    
(working copy)
@@ -270,17 +265,18 @@
                     IoBuffer buf = ctx.getBuffer();
                     buf.flip();
                     buf.limit(buf.limit() - matchCount);
-                    
+
                     try {
-                        writeText(session, buf.getString(ctx.getDecoder()), 
out);
+                        byte[] data = new byte[buf.limit()];
+                        buf.get(data);
+                        writeText(session, new String(data, 
ctx.getDecoder().charset()), out);
                     } finally {
                         buf.clear();
                     }
                 } else {
                     int overflowPosition = ctx.getOverflowPosition();
                     ctx.reset();
-                    throw new RecoverableProtocolDecoderException(
-                            "Line is too long: " + overflowPosition);
+                    throw new RecoverableProtocolDecoderException("Line is too 
long: " + overflowPosition);
                 }
 
                 oldPos = pos;

                
> TextLineCodecFactory does not decode correct if there is a nullbyte within 
> the string
> -------------------------------------------------------------------------------------
>
>                 Key: DIRMINA-904
>                 URL: https://issues.apache.org/jira/browse/DIRMINA-904
>             Project: MINA
>          Issue Type: Bug
>          Components: Filter
>    Affects Versions: 2.0.4
>         Environment: Ubuntu Linux, Java 1.6.0_26, Mina 2.0.4
>            Reporter: Martin Leuschner
>         Attachments: mina_nullbyte_bug.zip
>
>
> I am running a tcp+udp server using mina. As decoder i am using  
> TextLineCodecFactory. Some of the messages we receive contain a nullbyte at 
> the beginning. In that case the received message is an empty string, so the 
> message gets lost.
> Example:
> //acceptor:
> acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new 
> TextLineCodecFactory()));
> acceptor.setHandler(myHandler);
> //test message with additional nullbyte at the beginning
> String s = new String(new byte[] {0, 77, 105, 110, 97});  //nullbyte + "Mina"
> //now send s to mina
> //myHandler:
> public void messageReceived(IoSession session, Object message) throws 
> Exception {
>               String res = (String) message;  //length is 0 instead of 5
> }
> See attached maven-project with unit-test

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to