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

HarmonySerialBlob.getBinaryStream(long, long) makes it impossible to retrieve the last character of the Blob.

    XMLWordPrintableJSON

Details

    • Normal
    • Repro attached
    • Seen in production, Wrong query result

    Description

      As far as I understand it, the method HarmonySerialBlob.getBinaryStream(long, long) takes two arguments <pos> and <length> and is supposed to produce a ByteArrayInputStream() with a substring of the Blob's Contents that starts at <pos> and has length <length>.

      Unfortunately, the error handling in this method makes it impossible to retrieve a suffix of the Blobs contents as the last character is always missing.

      In detail:
      When calling this method with <pos>=0, then it raises the SQLException XJ087. Hence, <pos> must always be > 0.
      When calling this method with <pos>=1 and <length>=blob.length(), then it also raises the SQLException, because pos+length > blob.length(). Hence, <length> can at most be set to blob.length()-1.

      When calling this method with <pos>=1 and <length>=blob.length()-1, then it gives a ByteArrayInputStream which is missing the last character from the blob.

      The fact that the last character is missing makes sense, when <length> is set to blob.length()-1.

      But it does not make sense to prohibit setting <length>=blob.length() when this is the only way to include the last character in the ByteArrayInputStream.

      Attachments

        1. derby-7143-01-aa-fixLengthMiscalculation.diff
          2 kB
          Richard N. Hillegas
        2. DERBY_7143.java
          2 kB
          Richard N. Hillegas

        Activity

          People

            Unassigned Unassigned
            ben2 Ben
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: