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