[ 
https://issues.apache.org/jira/browse/DERBY-3941?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Yun Lee updated DERBY-3941:
---------------------------

    Attachment: derby-3941-2.stat
                derby-3941-2.diff

Knut, 

>1) skipPersistentDataInput() checks if DataInput.readByte() returns -1 to 
>detect that EOF has been reached, but I think that that method will throw 
>EOFException and not return -1 on EOF 

I have changed both  skipPersistentDataInput() and skipPersistent() to perform 
like what you need, and changed the document of UTF8Util.internalSkip(final 
InputStream in, final long charsToSkip) which used the skipPersistent(). I 
think the new revision can act smartlier. Please check the new patches, thanks!

>2) I think I would have renamed skipPersistentDataInput() and 
>skipFullyDataInput() to skipPersistent() and skipFully().

I have tried this before providing the first patches, however, I found it's not 
able to use overload here, as it will lead to some compiling-time error on 
ambiguous use, i.e. InputStreamUtil.skipFully(null, int), and 
InputStreamUtil.skipFully(dis, int) where dis is an instance of DataInputStream.

Yun


> Unsafe use of DataInput.skipBytes() in StoredPage and StoredFieldHeader
> -----------------------------------------------------------------------
>
>                 Key: DERBY-3941
>                 URL: https://issues.apache.org/jira/browse/DERBY-3941
>             Project: Derby
>          Issue Type: Bug
>          Components: Newcomer, Store
>            Reporter: Knut Anders Hatlen
>            Assignee: Yun Lee
>            Priority: Minor
>         Attachments: derby-3941-1.diff, derby-3941-1.stat, derby-3941-2.diff, 
> derby-3941-2.stat
>
>
> Some methods in StoredFileHeader and StoredPage call 
> java.io.DataInput.skipBytes(int) with the assumption that it always skips the 
> requested number of bytes. According to the javadoc for skipBytes, it may 
> skip fewer bytes than requested, possibly 0, even if the end of the stream 
> hasn't been reached.
> The problem exists in these methods:
>   StoredFieldHeader.readFieldDataLength()
>   StoredPage.readRecordFromStream()
>   StoredPage.skipField()
>   StoredPage.readOneColumnFromPage()
>   StoredPage.readRecordFromArray()
> We should change the code so that it works correctly even if skipBytes() were 
> to skip fewer bytes than requested.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to