demoRead() function in test_demovfs.c not consistent with documentation

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

demoRead() function in test_demovfs.c not consistent with documentation

Dominique Pellé
Hi

SQLite page https://sqlite.org/c3ref/io_methods.html says
at the bottom:

=== BEGIN QUOTE ===
If xRead() returns SQLITE_IOERR_SHORT_READ it must
also fill in the unread portions of the buffer with zeros. A VFS
that fails to zero-fill short reads might seem to work.
However, failure to zero-fill short reads will eventually lead
to database corruption.
=== END QUOTE ===

Yet, I see that function demoRead() in the demo
VFS example at https://www.sqlite.org/src/doc/trunk/src/test_demovfs.c
does not zero-fill the buffer in case of SQLITE_IOERR_SHORT_READ.

It looks like a bug in the demo code, or is the
SQLite documentation incorrect?

Regards
Dominique
_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
Reply | Threaded
Open this post in threaded view
|

Re: demoRead() function in test_demovfs.c not consistent with documentation

Dan Kennedy-4

On 15/6/62 20:08, Dominique Pellé wrote:

> Hi
>
> SQLite page https://sqlite.org/c3ref/io_methods.html says
> at the bottom:
>
> === BEGIN QUOTE ===
> If xRead() returns SQLITE_IOERR_SHORT_READ it must
> also fill in the unread portions of the buffer with zeros. A VFS
> that fails to zero-fill short reads might seem to work.
> However, failure to zero-fill short reads will eventually lead
> to database corruption.
> === END QUOTE ===
>
> Yet, I see that function demoRead() in the demo
> VFS example at https://www.sqlite.org/src/doc/trunk/src/test_demovfs.c
> does not zero-fill the buffer in case of SQLITE_IOERR_SHORT_READ.
>
> It looks like a bug in the demo code, or is the
> SQLite documentation incorrect?


Hi Dominique

I think it's a bug in the demo code. Fixed, along with a problem in the
xFileControl method, here:

   https://sqlite.org/src/info/ca4ddfefc1be1afb

I'm not sure that breaking this rule can actually lead to database
corruption, except in the trivial case where the database is 0 bytes in
size at the start of the transaction. But it's hard to be 100% sure of
that, and quite impossible to be sure that SQLite won't change to take
advantage of this part of the specification in the future. So I guess
new VFS implementations should zero memory when returning
SQLITE_IOERR_SHORT_READ.

Regards,

Dan.




_______________________________________________
sqlite-users mailing list
[hidden email]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users