harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andrew Zhang" <zhanghuang...@gmail.com>
Subject [classlib][sql] SerialBlob.setBytes exception thrown compatibility issue
Date Mon, 18 Dec 2006 13:07:10 GMT
Hi guys,

It's SerialBlob again. It's the third time to ask similar question about
SerialBlob class. :)
Let's take a look at the spec of setBytes(long pos,byte [] bytes, int
offset, int length).   Throws SerialException - if there is an error
accessing the BLOB value; if an invalid position is set; if an invalid
offset value is set; if number of bytes to be written is greater than the
SerialBlob length; or the combined values of the length and offset is
greater than the Blob buffer

As my understanding, the tortuous words shows that setBytes should throw
SerialException if there's any array index outbound. But following code
shows that RI's behaviour looks weird:
public void testSetBytes() throws Exception {
        byte[] buf = { 1, 2, 3, 4, 5, 6, 7, 8 };
        byte[] theBytes = { 9, 9, 9 };
        SerialBlob serialBlob = new SerialBlob(buf);
        serialBlob.setBytes(7, theBytes); // ArrayIndexOutOfBoundsException
        serialBlob.setBytes(7, theBytes, 0, 3); //
ArrayIndexOutOfBoundsException
        serialBlob.setBytes(7, theBytes, 0, 10); // SerialException
    }
Let's look at the spec again, what does "the combined values of the length
and offset is greater than the Blob buffer " mean? The previous sentence
already says "if number of bytes to be written (length) is greater than the
SerialBlob length(Blob buffer)".

The spec of another similar method setBytes(long pos, byte[] bytes) looks
more interesting:
SerialException - if there is an error accessing the BLOB value; or if an
invalid position is set; if an invalid offset value is set
But who can tell me what does "if an invalid offset value is set" mean? :-)

The SerialBlob class looks scary to me.  What shall we do for setBytes?
Follow RI or always throw SerialException for invalid array index?
Personally I prefer to the latter one, and if it breaks any existing
application or fails TCK tests later, then let's fix it. Any
suggestions/comments? Thanks in advance!


-- 
Best regards,
Andrew Zhang

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message