db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Yun Lee (JIRA)" <j...@apache.org>
Subject [jira] Updated: (DERBY-3941) Unsafe use of DataInput.skipBytes() in StoredPage and StoredFieldHeader
Date Sun, 12 Apr 2009 11:33:15 GMT

     [ 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


>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.


> 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.

View raw message