db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bryan Pendleton (JIRA)" <derby-...@db.apache.org>
Subject [jira] Updated: (DERBY-1533) ArrayIndexOutOfBoundsException in DDMReader, on a specific data size
Date Wed, 19 Jul 2006 23:35:15 GMT
     [ http://issues.apache.org/jira/browse/DERBY-1533?page=all ]

Bryan Pendleton updated DERBY-1533:
-----------------------------------

    Attachment: ddmreader1.diff

I know I said I wasn't going to work on this bug until after I returned from vacation, but
those darned DRDA protocol bugs are just too much fun! (Besides, I got my packing done early).

I need to work up a complete proposal, with detailed notes, javadoc changes, regression tests,
and so forth,  and of course run the full regression suite, but attached is 'ddmreader1.diff'
which is the core of a possible fix.

I think there are two basic issues here:

1) DDMReader.compressBLayerData seems to have a few small bugs involving the mechanics of
de-segmenting a multi-segment message. I believe that the almost identical routine in the
network client (Reply.compressBLayerData()) is correct, so I just made the two routines match.

2) The network client appears to decide whether to flow a large byte array as inline data
or as externalized data based on its length; if the data is less than 32767 bytes long it
is flowed inline (see line 1164 or so in NetStatementRequest.java). However, the network server
was not mirroring that logic, and sometimes decided to parse an incoming byte array as externalized
data even though the network client had sent it inline.

In early August, I will follow-up this patch with a complete patch, but if anybody has the
time to review this code before then, that would be great!


> ArrayIndexOutOfBoundsException in DDMReader, on a specific data size
> --------------------------------------------------------------------
>
>                 Key: DERBY-1533
>                 URL: http://issues.apache.org/jira/browse/DERBY-1533
>             Project: Derby
>          Issue Type: Bug
>          Components: Network Server
>    Affects Versions: 10.1.2.1, 10.1.3.1
>         Environment: --------- Derby Network Server Information --------
> Version: CSS10011/10.1.3.1  Build: 417277  DRDA Product Id: CSS10011
> -- listing properties --
> derby.drda.maxThreads=0
> derby.drda.keepAlive=true
> derby.drda.minThreads=0
> derby.drda.portNumber=1527
> derby.drda.logConnections=false
> derby.drda.timeSlice=0
> derby.drda.startNetworkServer=false
> derby.drda.host=localhost
> derby.drda.traceAll=false
> ------------------ Java Information ------------------
> Java Version:    1.4.2_08
> Java Vendor:     Sun Microsystems Inc.
> OS name:         Windows XP
> OS architecture: x86
> OS version:      5.1
> java.specification.name: Java Platform API Specification
> java.specification.version: 1.4
> --------- Derby Information --------
> JRE - JDBC: J2SE 1.4.2 - JDBC 3.0
> [C:\dev\derby\lib\derby.jar] 10.1.3.1 - (417277)
> [C:\dev\derby\lib\derbytools.jar] 10.1.3.1 - (417277)
> [C:\dev\derby\lib\derbynet.jar] 10.1.3.1 - (417277)
> ------------------------------------------------------
>            Reporter: Wiktor Lisowicz
>         Attachments: ddmreader1.diff, DerbyTest.java, DerbyTest2.java
>
>
> As far as I know, this bug is not related to DERBY-428 bug.
> I got this bug both on 10.1.3.1 and 10.1.2.1 - an ArrayIndexOutOfBoundsException in DDMReader
(in Network Server).
> To reproduce the bug:
> 1. Compile the attached DerbyTest.java
> 2. Start the Network Server (startNetworkServer.bat under Windows)
> 3. Run: java DerbyTest
> On client side you get:
> org.apache.derby.client.am.DisconnectException: The DDM object is not supported.  Unsupported
DDM object code point: 0x0
>         at org.apache.derby.client.net.NetConnectionReply.doObjnsprmSemantics(Unknown
Source)
>         at org.apache.derby.client.net.NetConnectionReply.parseCommonError(Unknown Source)
>         at org.apache.derby.client.net.NetStatementReply.parseExecuteError(Unknown Source)
>         at org.apache.derby.client.net.NetStatementReply.parseEXCSQLSTTreply(Unknown
Source)
>         at org.apache.derby.client.net.NetStatementReply.readExecute(Unknown Source)
>         at org.apache.derby.client.net.StatementReply.readExecute(Unknown Source)
>         at org.apache.derby.client.net.NetPreparedStatement.readExecute_(Unknown Source)
>         at org.apache.derby.client.am.PreparedStatement.readExecute(Unknown Source)
>         at org.apache.derby.client.am.PreparedStatement.flowExecute(Unknown Source)
>         at org.apache.derby.client.am.PreparedStatement.executeX(Unknown Source)
>         at org.apache.derby.client.am.PreparedStatement.execute(Unknown Source)
>         at DerbyTest.main(DerbyTest.java:479)
> On server side you get:
> java.lang.ArrayIndexOutOfBoundsException
>         at java.lang.System.arraycopy(Native Method)
>         at org.apache.derby.impl.drda.DDMReader.compressBLayerData(Unknown Source)
>         at org.apache.derby.impl.drda.DDMReader.ensureBLayerDataInBuffer(Unknown Source)
>         at org.apache.derby.impl.drda.DDMReader.readNetworkShort(Unknown Source)
>         at org.apache.derby.impl.drda.DDMReader.readLDStringData(Unknown Source)
>         at org.apache.derby.impl.drda.DRDAConnThread.readAndSetParams(Unknown Source)
>         at org.apache.derby.impl.drda.DRDAConnThread.parseSQLDTA_work(Unknown Source)
>         at org.apache.derby.impl.drda.DRDAConnThread.parseSQLDTA(Unknown Source)
>         at org.apache.derby.impl.drda.DRDAConnThread.parseEXCSQLSTTobjects(Unknown Source)
>         at org.apache.derby.impl.drda.DRDAConnThread.parseEXCSQLSTT(Unknown Source)
>         at org.apache.derby.impl.drda.DRDAConnThread.processCommands(Unknown Source)
>         at org.apache.derby.impl.drda.DRDAConnThread.run(Unknown Source)
> agentThread[DRDAConnThread_11,5,main]
> null
> java.lang.ArrayIndexOutOfBoundsException
>         at java.lang.System.arraycopy(Native Method)
>         at org.apache.derby.impl.drda.DDMReader.compressBLayerData(Unknown Source)
>         at org.apache.derby.impl.drda.DDMReader.ensureBLayerDataInBuffer(Unknown Source)
>         at org.apache.derby.impl.drda.DDMReader.readNetworkShort(Unknown Source)
>         at org.apache.derby.impl.drda.DDMReader.readLDStringData(Unknown Source)
>         at org.apache.derby.impl.drda.DRDAConnThread.readAndSetParams(Unknown Source)
>         at org.apache.derby.impl.drda.DRDAConnThread.parseSQLDTA_work(Unknown Source)
>         at org.apache.derby.impl.drda.DRDAConnThread.parseSQLDTA(Unknown Source)
>         at org.apache.derby.impl.drda.DRDAConnThread.parseEXCSQLSTTobjects(Unknown Source)
>         at org.apache.derby.impl.drda.DRDAConnThread.parseEXCSQLSTT(Unknown Source)
>         at org.apache.derby.impl.drda.DRDAConnThread.processCommands(Unknown Source)
>         at org.apache.derby.impl.drda.DRDAConnThread.run(Unknown Source)

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message