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

Rick Hillegas updated DERBY-4315:
---------------------------------

    Attachment: derby-4315-01-aa-regularizeExceptionHandling.diff

Attaching derby-4315-01-aa-regularizeExceptionHandling.diff. This patch causes 
the offending logic in the network client to catch all exceptions from 
InputStreams, and not just IOExceptions. Running regression tests now.

After applying this patch, we will not see protocol errors when 
InputStream.read() raises an exception other than an IOException. However, 
those other exceptions will be wrapped with the bogus protocol error status 
described by this bug.

Touches the following files:

M      java/client/org/apache/derby/client/net/Request.java


> Attempt to reuse streams in client on insert gives protocol exception and 
> inserts wrong data
> --------------------------------------------------------------------------------------------
>
>                 Key: DERBY-4315
>                 URL: https://issues.apache.org/jira/browse/DERBY-4315
>             Project: Derby
>          Issue Type: Bug
>          Components: JDBC
>    Affects Versions: 10.1.3.1, 10.2.2.0, 10.3.3.0, 10.4.2.0, 10.5.1.1, 
> 10.5.2.0, 10.6.1.0
>            Reporter: Kathey Marsden
>         Attachments: derby-4315-01-aa-regularizeExceptionHandling.diff, 
> ReproReuseStream.java, ReproReuseStream.java, StreamError.java
>
>
> If a user attempts to reuse a stream set as a parameter to a prepared 
> statement, the statement execution should fail with SQL State XJ001.  Instead 
> client fails with a protocol error and inserts wrong data. See the attached 
> java program ReproReuseStream.java for a reproduction.
> [C:/kmarsden/repro/reusestream] java ReproReuseStream
> Insert row 1
> Try to insert row 2 with reused streams
> java.sql.SQLException: Network protocol error: end of stream prematurely 
> reached, parameter #4.  Remaining data has been
>  padded with 0x0.
>         at 
> org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(SQLExceptionFactory40.java:96)
>         at 
> org.apache.derby.client.am.SqlException.getSQLException(SqlException.java:358)
>         at 
> org.apache.derby.client.am.PreparedStatement.executeUpdate(PreparedStatement.java:399)
>         at ReproReuseStream.main(ReproReuseStream.java:41)
> Caused by: org.apache.derby.client.am.SqlException: Network protocol error: 
> end of stream prematurely reached, parameter
>  #4.  Remaining data has been padded with 0x0.
>         at 
> org.apache.derby.client.net.Request.writePlainScalarStream(Request.java:490)
>         at 
> org.apache.derby.client.net.Request.writeScalarStream(Request.java:264)
>         at 
> org.apache.derby.client.net.NetStatementRequest.buildEXTDTA(NetStatementRequest.java:951)
>         at 
> org.apache.derby.client.net.NetStatementRequest.writeExecute(NetStatementRequest.java:147)
>         at 
> org.apache.derby.client.net.NetPreparedStatement.writeExecute_(NetPreparedStatement.java:178)
>         at 
> org.apache.derby.client.am.PreparedStatement.writeExecute(PreparedStatement.java:1801)
>         at 
> org.apache.derby.client.am.PreparedStatement.flowExecute(PreparedStatement.java:2031)
>         at 
> org.apache.derby.client.am.PreparedStatement.executeUpdateX(PreparedStatement.java:404)
>         at 
> org.apache.derby.client.am.PreparedStatement.executeUpdate(PreparedStatement.java:390)
>         ... 1 more
> Go ahead and commit so we can see the wrong data.
> ID         |MNAME
>                     |MVALUE     |BYTEDATA
>                                          |CHARDATA
> ------------------------------------------------------------------------------------------------------------------------
> ------------------------------------------------------------------------------------------------------------------------
> ------------------------------------------------------------------------------------------------------------------------
> --------------------------------------------------
> 1          |mname
>                     |0          
> |636363636363636363636363636363636363636363636363636363636363636363636363636363636363636
> 3636363636363636363636363636363636363636&|cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
> ccccccccccccccccccccccccccccccccccccccccccccccccc&
> 2          |mname
>                     |0          
> |000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
> 0000000000000000000000000000000000000000&|
>                                                  &
> To workaround the issue users should not attempt to reuse streams but we 
> should give a better message and not insert wrong data.
> The code was extracted from StreamingColumnTest testDerby500 but the commits 
> were removed.

-- 
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