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

Emmanuel Lécharny edited comment on DIRMINA-1181 at 9/27/24 9:32 AM:
---------------------------------------------------------------------

The {{getString()}} method will be fixed by adding an increment on the {{i}} 
counter when checking for the existence of a UTF-16 NULL terminating sequence 
(\{{0x00 0x00}}):

 

{code:java}
            for (;;) {
                boolean wasZero = get(i) == 0;
                i++;

                if (i >= oldLimit) {
                    break;
                }

                if (get(i) != 0) {
                    i++;
                    if (i >= oldLimit) {
                        break;
                    }

                    continue;
                }

                i++;     // That was missing
                
                if (wasZero) {
                    end = i - 2;    // Don't forget to get back 2 chars !
                    break;
                }
            }

{code}


was (Author: elecharny):
The two {{getString()}} methods will be fixed by adding an increment on the 
{{i}} counter when checking for the existence of a UTF-16 NULL terminating 
sequence (\{{0x00 0x00}}):

 

{code:java}
            for (;;) {
                boolean wasZero = get(i) == 0;
                i++;

                if (i >= oldLimit) {
                    break;
                }

                if (get(i) != 0) {
                    i++;
                    if (i >= oldLimit) {
                        break;
                    }

                    continue;
                }

                i++;     // That was missing
                
                if (wasZero) {
                    end = i - 2;    // Don't forget to get back 2 chars !
                    break;
                }
            }

{code}

> Exception thrown when attempting to decode certain UTF16 chars
> --------------------------------------------------------------
>
>                 Key: DIRMINA-1181
>                 URL: https://issues.apache.org/jira/browse/DIRMINA-1181
>             Project: MINA
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.1.6
>         Environment: Linux, Windows, Java 8, Java 17
>            Reporter: Pete Disdale
>            Priority: Major
>         Attachments: MacronTest-1.java, MacronTest.java
>
>
> When trying to decode a UTF16BE input stream containing characters ot the 
> form \uxx00, for example \u0100 (capital A with macron) the method 
> *AbstractIoBuffer.getString(CharsetDecoder)* incorrectly interprets the 
> second byte as a null terminator (causing a 
> java.nio.charset.MalformedInputException to be thrown) despite this null byte 
> being mid-character (at an odd index). The attached file, MacronTest, 
> demonstrates the issue and when run produces the following output:
> buf = ABC
> Exception in thread "main" java.nio.charset.MalformedInputException: Input 
> length = 1
>     at 
> java.base/java.nio.charset.CoderResult.throwException(CoderResult.java:274)
>     at 
> org.apache.mina.core.buffer.AbstractIoBuffer.getString(AbstractIoBuffer.java:1669)
>     at MacronTest.<init>(MacronTest.java:61)
>     at MacronTest.main(MacronTest.java:13)
> It looks like this issue is also in the 2.2.X branch (3.X/trunk not checked).



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@mina.apache.org
For additional commands, e-mail: dev-h...@mina.apache.org

Reply via email to