Derby
  1. Derby
  2. DERBY-4315

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

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 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
    • Fix Version/s: 10.7.1.1, 10.8.1.2
    • Component/s: JDBC
    • Urgency:
      Urgent
    • Issue & fix info:
      High Value Fix, Repro attached, Workaround attached
    • Bug behavior facts:
      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.

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

        Issue Links

          Activity

          No work has yet been logged on this issue.

            People

            • Assignee:
              Rick Hillegas
              Reporter:
              Kathey Marsden
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development