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