[ 
https://issues.apache.org/jira/browse/DERBY-4799?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Knut Anders Hatlen updated DERBY-4799:
--------------------------------------

    Attachment: fix.diff

The problem appears to be that DRDAConnThread.writeRDBNAM() uses the length of 
the string in characters when it calls writeScalarPaddedBytes(). 
writeScalarPaddedBytes() expects the length in bytes, and gets confused when 
paddedLength is less than buf.length.

The reason why we need at least 18 characters in the name in order to see the 
bug, is that the database name is always padded to at least 18 bytes (DRDA 
requirement).

The attached patch (fix.diff) makes writeRDBNAM() use number of bytes instead 
of number of characters. I'll see if I can come up with a regression test for 
the bug.

> IllegalArgumentException when generating error message on server
> ----------------------------------------------------------------
>
>                 Key: DERBY-4799
>                 URL: https://issues.apache.org/jira/browse/DERBY-4799
>             Project: Derby
>          Issue Type: Bug
>          Components: Network Server
>    Affects Versions: 10.6.1.0
>            Reporter: Knut Anders Hatlen
>            Assignee: Knut Anders Hatlen
>         Attachments: fix.diff
>
>
> If you for example try to connect to a non-existing database using the client 
> driver, and the name of the database has 18 characters or more, and at least 
> one of the characters in the database name is a non-ascii character, the 
> server will throw an IllegalArgumentException when trying to send the 
> "database not found" message back to the client.
> Example:
> ij> connect 'jdbc:derby://localhost/abcdefghijklmnopqå';
> ERROR 08006: A network protocol error was encountered and the connection has 
> been terminated: A PROTOCOL Data Stream Syntax Error was detected.  Reason: 
> 0x12. Plaintext connection attempt to an SSL enabled server?
> Printed to the console by the server:
> Tue Sep 14 09:12:05 CEST 2010 : fromIndex(60) > toIndex(59)
> java.lang.IllegalArgumentException: fromIndex(60) > toIndex(59)
>       at java.util.Arrays.rangeCheck(Arrays.java:1306)
>       at java.util.Arrays.fill(Arrays.java:2567)
>       at org.apache.derby.impl.drda.DDMWriter.padBytes(DDMWriter.java:1254)
>       at 
> org.apache.derby.impl.drda.DDMWriter.writeScalarPaddedBytes(DDMWriter.java:992)
>       at 
> org.apache.derby.impl.drda.DRDAConnThread.writeRDBNAM(DRDAConnThread.java:583)
>       at 
> org.apache.derby.impl.drda.DRDAConnThread.writeRDBfailure(DRDAConnThread.java:1248)
>       at 
> org.apache.derby.impl.drda.DRDAConnThread.parseDRDAConnection(DRDAConnThread.java:1194)
>       at 
> org.apache.derby.impl.drda.DRDAConnThread.processCommands(DRDAConnThread.java:968)
>       at 
> org.apache.derby.impl.drda.DRDAConnThread.run(DRDAConnThread.java:294)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to