Hi,
Not entirely sure about this, but it looks to me like the following snippet (from sqlite3PagerSharedLock in pager.c [0]) has a bug:
```
char dbFileVers[sizeof(pPager->dbFileVers)];
IOTRACE(("CKVERS %p %d\n", pPager, sizeof(dbFileVers)));
rc = sqlite3OsRead(pPager->fd, &dbFileVers, sizeof(dbFileVers), 24);
if( rc!=SQLITE_OK ){
if( rc!=SQLITE_IOERR_SHORT_READ ){
goto failed;
}
memset(dbFileVers, 0, sizeof(dbFileVers));
}
```
Shouldn't it be
```
char dbFileVers[sizeof(pPager->dbFileVers)];
IOTRACE(("CKVERS %p %d\n", pPager, sizeof(dbFileVers)));
rc = sqlite3OsRead(pPager->fd, dbFileVers, sizeof(dbFileVers), 24);
if( rc!=SQLITE_OK ){
if( rc!=SQLITE_IOERR_SHORT_READ ){
goto failed;
}
memset(dbFileVers, 0, sizeof(dbFileVers));
}
```
instead? i.e., replace `&dbFileVers` with `dbFileVers` in the `sqlite3OsRead` call.
Cheers,
Hugo
[0] https://github.com/sqlite/sqlite/blob/master/src/pager.c#L5342