[
https://issues.apache.org/jira/browse/DERBY-4315?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12934502#action_12934502
]
Rick Hillegas commented on DERBY-4315:
--------------------------------------
Committed derby-4315-02-aa-cleanupEndOfStreamMessage.diff at subversion
revision 1037764. The tests passed cleanly for me although I did see the
following exception on the console while running the JUnit tests:
Exception in thread "DRDAConnThread_508"
org.apache.derby.iapi.error.ShutdownException:
at
org.apache.derby.iapi.services.context.ContextManager.checkInterrupt(ContextManager.java:437)
at
org.apache.derby.iapi.services.context.ContextManager.getContext(ContextManager.java:155)
at
org.apache.derby.iapi.services.context.ContextService.getContextOrNull(ContextService.java:249)
at
org.apache.derby.iapi.util.InterruptStatus.restoreIntrFlagIfSeen(InterruptStatus.java:158)
at
org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(TransactionResourceImpl.java:356)
at
org.apache.derby.impl.jdbc.EmbedConnection.handleException(EmbedConnection.java:2284)
at
org.apache.derby.impl.jdbc.ConnectionChild.handleException(ConnectionChild.java:82)
at
org.apache.derby.impl.jdbc.EmbedPreparedStatement.closeActions(EmbedPreparedStatement.java:261)
at
org.apache.derby.impl.jdbc.EmbedStatement.close(EmbedStatement.java:307)
at
org.apache.derby.impl.drda.DRDAStatement.close(DRDAStatement.java:1027)
at org.apache.derby.impl.drda.Database.close(Database.java:364)
at org.apache.derby.impl.drda.Session.close(Session.java:115)
at
org.apache.derby.impl.drda.DRDAConnThread.closeSession(DRDAConnThread.java:8289)
at
org.apache.derby.impl.drda.DRDAConnThread.run(DRDAConnThread.java:315)
> 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,
> derby-4315-01-ab-regularizeExceptionHandling.diff,
> derby-4315-02-aa-cleanupEndOfStreamMessage.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.