=== 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 ===
Re: demoRead() function in test_demovfs.c not consistent with documentation
On 15/6/62 20:08, Dominique Pellé wrote:
> 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?
I think it's a bug in the demo code. Fixed, along with a problem in the
xFileControl method, here:
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