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

    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. derby-4315-01-aa-regularizeExceptionHandling.diff
          1.0 kB
          Richard N. Hillegas
        2. derby-4315-01-ab-regularizeExceptionHandling.diff
          5 kB
          Richard N. Hillegas
        3. derby-4315-02-aa-cleanupEndOfStreamMessage.diff
          0.7 kB
          Richard N. Hillegas
        4. ReproReuseStream.java
          3 kB
          Richard N. Hillegas
        5. ReproReuseStream.java
          2 kB
          Katherine Marsden
        6. StreamError.java
          4 kB
          Richard N. Hillegas

        Issue Links

          Activity

            People

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

              Dates

                Created:
                Updated:
                Resolved: