Skip to content

sqlite3_key crashes with a NULL pointer (with #DEFINEs) #90

@anperch

Description

@anperch

Hi,

I have used this #define configuration in my applications till now.

HAVE_CIPHER_AES_128_CBC=0
HAVE_CIPHER_AES_256_CBC=0
HAVE_CIPHER_SQLCIPHER=0
HAVE_CIPHER_RC4=0
HAVE_CIPHER_CHACHA20=1
CODEC_TYPE=CODEC_TYPE_CHACHA20

With 1.5.1, sqlite3_key crashes with a NULL pointer (both VS22 and gcc).

Call stack :

.exe!sqlite3mcGetCipherParameter(_CipherParams * cipherParams, const char * paramName) Line 39 C
.exe!AllocateChaCha20Cipher(sqlite3 * db) Line 73 C
.exe!sqlite3mcCodecSetup(_Codec * codec, int cipherType, char * userPassword, int passwordLength) Line 251 C
.exe!sqlite3mcCodecAttach(sqlite3 * db, int nDb, const char * zKey, const void * nKey, int) Line 280 C
.exe!sqlite3_key_v2(sqlite3 * db, const char * zDbName, const void * zKey, int nKey) Line 359 C

At some point, sqlite3mcGetCipherParams returns a NULL cipherParams pointer that is passed to sqlite3mcGetCipherParameter.

static void*
AllocateChaCha20Cipher(sqlite3* db)
{
ChaCha20Cipher* chacha20Cipher = (ChaCha20Cipher*) sqlite3_malloc(sizeof(ChaCha20Cipher));
if (chacha20Cipher != NULL)
{
memset(chacha20Cipher, 0, sizeof(ChaCha20Cipher));
chacha20Cipher->m_keyLength = KEYLENGTH_CHACHA20;
memset(chacha20Cipher->m_key, 0, KEYLENGTH_CHACHA20);
memset(chacha20Cipher->m_salt, 0, SALTLENGTH_CHACHA20);
}
if (chacha20Cipher != NULL)
{
CipherParams* cipherParams = sqlite3mcGetCipherParams(db, CODEC_TYPE_CHACHA20); <<<<========= cipherParams is NULL at some point
chacha20Cipher->m_legacy = sqlite3mcGetCipherParameter(cipherParams, "legacy"); <<<<========= cipherParams used without a NULL check
chacha20Cipher->m_legacyPageSize = sqlite3mcGetCipherParameter(cipherParams, "legacy_page_size");
chacha20Cipher->m_kdfIter = sqlite3mcGetCipherParameter(cipherParams, "kdf_iter");
if (chacha20Cipher->m_legacy != 0)
{
chacha20Cipher->m_kdfIter = SQLEET_KDF_ITER;
}
}
return chacha20Cipher;
}

  • Without the #defines everything is ok (both VS22 and gcc).

Can you reproduce ?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions