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
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to