Skip to content
This repository was archived by the owner on Sep 2, 2019. It is now read-only.

Commit 3aa20eb

Browse files
committed
wxSQLite3 updated to 3.2.0
(sqlite3 updated to 3.8.7.4)
1 parent a7723b5 commit 3aa20eb

File tree

13 files changed

+9576
-4774
lines changed

13 files changed

+9576
-4774
lines changed

VERSIONS

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
wxsqlite=3.1.1
2-
sqlite=3.8.5
1+
wxsqlite=3.2.0
2+
sqlite=3.8.7.4
33
premake=4.4-beta5

src/codec.c

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,12 @@
3939

4040
#include "codec.h"
4141

42+
#ifndef SQLITE_USER_AUTHENTICATION
4243
#if CODEC_TYPE == CODEC_TYPE_AES256
4344
#include "sha2.h"
4445
#include "sha2.c"
4546
#endif
47+
#endif
4648

4749
/*
4850
// ----------------
@@ -702,47 +704,67 @@ CodecGenerateEncryptionKey(Codec* codec, char* userPassword, int passwordLength,
702704
void
703705
CodecEncrypt(Codec* codec, int page, unsigned char* data, int len, int useWriteKey)
704706
{
707+
#ifdef WXSQLITE3_USE_OLD_ENCRYPTION_SCHEME
708+
/* Use the previous encryption scheme */
709+
unsigned char* key = (useWriteKey) ? codec->m_writeKey : codec->m_readKey;
710+
CodecAES(codec, page, 1, key, data, len, data);
711+
#else
705712
unsigned char dbHeader[8];
706713
int offset = 0;
707714
unsigned char* key = (useWriteKey) ? codec->m_writeKey : codec->m_readKey;
708715
if (page == 1)
709716
{
717+
/* Save the header bytes remaining unencrypted */
710718
memcpy(dbHeader, data+16, 8);
711719
offset = 16;
712720
CodecAES(codec, page, 1, key, data, 16, data);
713721
}
714722
CodecAES(codec, page, 1, key, data+offset, len-offset, data+offset);
715723
if (page == 1)
716724
{
725+
/* Move the encrypted header bytes 16..23 to a safe position */
717726
memcpy(data+8, data+16, 8);
727+
/* Restore the unencrypted header bytes 16..23 */
718728
memcpy(data+16, dbHeader, 8);
719729
}
730+
#endif
720731
}
721732

722733
void
723734
CodecDecrypt(Codec* codec, int page, unsigned char* data, int len)
724735
{
736+
#ifdef WXSQLITE3_USE_OLD_ENCRYPTION_SCHEME
737+
/* Use the previous encryption scheme */
738+
CodecAES(codec, page, 0, codec->m_readKey, data, len, data);
739+
#else
725740
unsigned char dbHeader[8];
726741
int dbPageSize;
727742
int offset = 0;
728743
if (page == 1)
729744
{
745+
/* Save (unencrypted) header bytes 16..23 */
730746
memcpy(dbHeader, data+16, 8);
747+
/* Determine page size */
731748
dbPageSize = (dbHeader[0] << 8) | (dbHeader[1] << 16);
749+
/* Check whether the database header is valid */
750+
/* If yes, the database follows the new encryption scheme, otherwise use the previous encryption scheme */
732751
if ((dbPageSize >= 512) && (dbPageSize <= SQLITE_MAX_PAGE_SIZE) && (((dbPageSize-1) & dbPageSize) == 0) &&
733752
(dbHeader[5] == 0x40) && (dbHeader[6] == 0x20) && (dbHeader[7] == 0x20))
734753
{
754+
/* Restore encrypted bytes 16..23 for new encryption scheme */
735755
memcpy(data+16, data+8, 8);
736756
offset = 16;
737757
}
738758
}
739759
CodecAES(codec, page, 0, codec->m_readKey, data+offset, len-offset, data+offset);
740760
if (page == 1 && offset != 0)
741761
{
762+
/* Verify the database header */
742763
if (memcmp(dbHeader, data+16, 8) == 0)
743764
{
744765
memcpy(data, SQLITE_FILE_HEADER, 16);
745766
}
746767
}
768+
#endif
747769
}
748770

src/codecext.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,11 @@ int sqlite3_rekey_v2(sqlite3 *db, const char *zDbName, const void *zKey, int nKe
338338
if (rc != SQLITE_OK)
339339
{
340340
/* Rollback in case of error */
341-
#if (SQLITE_VERSION_NUMBER >= 3007011)
341+
#if (SQLITE_VERSION_NUMBER >= 3008007)
342+
/* Unfortunately this change was introduced in version 3.8.7.2 which cannot be detected using the SQLITE_VERSION_NUMBER */
343+
/* That is, compilation will fail for version 3.8.7 or 3.8.7.1 ==> Please change manually ... or upgrade to 3.8.7.2 or higher */
344+
sqlite3BtreeRollback(pbt, SQLITE_OK, 0);
345+
#elif (SQLITE_VERSION_NUMBER >= 3007011)
342346
sqlite3BtreeRollback(pbt, SQLITE_OK);
343347
#else
344348
sqlite3BtreeRollback(pbt);

0 commit comments

Comments
 (0)