Uploaded image for project: 'Derby'
  1. Derby
  2. DERBY-4315

Attempt to reuse streams in client on insert gives protocol exception and inserts wrong data

Agile BoardAttach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 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
    • 10.7.1.1, 10.8.1.2
    • JDBC
    • Urgent
    • High Value Fix, Repro attached, Workaround attached
    • Embedded/Client difference, Wrong query result

    Description

      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.

      Attachments

        1. StreamError.java
          4 kB
          Richard N. Hillegas
        2. ReproReuseStream.java
          2 kB
          Katherine Marsden
        3. ReproReuseStream.java
          3 kB
          Richard N. Hillegas
        4. derby-4315-02-aa-cleanupEndOfStreamMessage.diff
          0.7 kB
          Richard N. Hillegas
        5. derby-4315-01-ab-regularizeExceptionHandling.diff
          5 kB
          Richard N. Hillegas
        6. derby-4315-01-aa-regularizeExceptionHandling.diff
          1.0 kB
          Richard N. Hillegas

        Issue Links

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            rhillegas Richard N. Hillegas
            kmarsden Katherine Marsden
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment