Skip to content

Commit 4552cf1

Browse files
committed
Prepare release of wxSQLite3 4.12.2
- Upgrade to SQLite3 Multiple Ciphers version 2.3.2 (SQLite version 3.51.3) - Use internally new API function sqlite3mc_cipher_name_copy instead of sqlite3mc_cipher_name
1 parent de8b01e commit 4552cf1

9 files changed

Lines changed: 156 additions & 40 deletions

File tree

CHANGELOG.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [4.12.2] - 2026-03-19
11+
12+
- Upgrade to SQLite3 Multiple Ciphers version 2.3.2 (SQLite version 3.51.3)
13+
- Use internally new API function `sqlite3mc_cipher_name_copy` instead of `sqlite3mc_cipher_name`
14+
1015
## [4.12.1] - 2026-03-14
1116

1217
- Upgrade to SQLite3 Multiple Ciphers version 2.3.1 (SQLite version 3.51.3)
@@ -728,7 +733,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
728733

729734
- First public release
730735

731-
[Unreleased]: ../../compare/v4.12.1...HEAD
736+
[Unreleased]: ../../compare/v4.12.2...HEAD
737+
[4.12.2]: ../../compare/v4.12.1...v4.12.2
732738
[4.12.1]: ../../compare/v4.12.0...v4.12.1
733739
[4.12.0]: ../../compare/v4.11.2...v4.12.0
734740
[4.11.2]: ../../compare/v4.11.1...v4.11.2

configure.ac

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ dnl Copyright (C) 2017-2026 Ulrich Telle <github@telle-online.de>, Vadim Zeitlin
44
dnl
55
dnl This file is covered by the same licence as the entire wxSQLite3 package.
66

7-
AC_INIT([wxsqlite3], [4.12.1], [github@telle-online.de])
7+
AC_INIT([wxsqlite3], [4.12.2], [github@telle-online.de])
88

99
dnl This is the version tested with, might work with earlier ones.
1010
AC_PREREQ([2.69])

docs/Doxyfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ PROJECT_NAME = wxSQLite3
4848
# could be handy for archiving the generated documentation or if some version
4949
# control system is used.
5050

51-
PROJECT_NUMBER = 4.12.0
51+
PROJECT_NUMBER = 4.12.2
5252

5353
# Using the PROJECT_BRIEF tag one can provide an optional one line description
5454
# for a project that appears at the top of each page and should give viewers a

include/wx/wxsqlite3_version.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414

1515
#define WXSQLITE3_MAJOR_VERSION 4
1616
#define WXSQLITE3_MINOR_VERSION 12
17-
#define WXSQLITE3_RELEASE_NUMBER 1
17+
#define WXSQLITE3_RELEASE_NUMBER 2
1818
#define WXSQLITE3_SUBRELEASE_NUMBER 0
19-
#define WXSQLITE3_VERSION_STRING "wxSQLite3 4.12.1"
19+
#define WXSQLITE3_VERSION_STRING "wxSQLite3 4.12.2"
2020

2121
#endif // WXSQLITE3_VERSION_H_

include/wx/wxsqlite3def.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,17 @@
4646
4747
<dl>
4848
49+
<dt><b>4.12.2</b> - <i>March 2026</i></dt>
50+
<dd>
51+
Upgrade to <i>SQLite3 Multiple Ciphers version 2.3.2 (SQLite version 3.51.3)</i><br>
52+
Use internally new API function sqlite3mc_cipher_name_copy instead of sqlite3mc_cipher_name
53+
54+
</dd>
55+
4956
<dt><b>4.12.1</b> - <i>March 2026</i></dt>
5057
<dd>
5158
Upgrade to <i>SQLite3 Multiple Ciphers version 2.3.1 (SQLite version 3.51.3)</i><br>
52-
Downgrade to SQLite 3.51.3 due to withdrawl of SQLite 3.52.0
59+
Downgrade to SQLite 3.51.3 due to withdrawal of SQLite 3.52.0
5360
5461
</dd>
5562

readme.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,9 @@ Currently the _CMake_ support is experimental and limited to Windows platforms (
5252

5353
## <a name="history"></a>Version history
5454

55-
* 4.12.1 - *March 2026*
55+
* 4.12.2 - *March 2026*
5656

57-
- Upgrade to SQLite3 Multiple Ciphers version 2.3.1 (SQLite version 3.51.3)
58-
- Downgrade to SQLite 3.51.3 due to withdrawal of SQLite 3.52.0
57+
- Upgrade to SQLite3 Multiple Ciphers version 2.3.2 (SQLite version 3.51.3)
5958

6059
For further version information please consult the [CHANGELOG](CHANGELOG.md).
6160

src/sqlite3mc_amalgamation.c

Lines changed: 122 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -266377,7 +266377,7 @@ SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; }
266377266377
** Purpose: Header file for SQLite3 Multiple Ciphers support
266378266378
** Author: Ulrich Telle
266379266379
** Created: 2020-03-01
266380-
** Copyright: (c) 2019-2024 Ulrich Telle
266380+
** Copyright: (c) 2019-2026 Ulrich Telle
266381266381
** License: MIT
266382266382
*/
266383266383

@@ -266405,9 +266405,9 @@ SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; }
266405266405

266406266406
#define SQLITE3MC_VERSION_MAJOR 2
266407266407
#define SQLITE3MC_VERSION_MINOR 3
266408-
#define SQLITE3MC_VERSION_RELEASE 1
266408+
#define SQLITE3MC_VERSION_RELEASE 2
266409266409
#define SQLITE3MC_VERSION_SUBRELEASE 0
266410-
#define SQLITE3MC_VERSION_STRING "SQLite3 Multiple Ciphers 2.3.1"
266410+
#define SQLITE3MC_VERSION_STRING "SQLite3 Multiple Ciphers 2.3.2"
266411266411

266412266412
#endif /* SQLITE3MC_VERSION_H_ */
266413266413
/*** End of #include "sqlite3mc_version.h" ***/
@@ -280476,6 +280476,7 @@ SQLITE_API void sqlite3_activate_see(const char* zPassPhrase);
280476280476
SQLITE_API int sqlite3mc_cipher_count();
280477280477
SQLITE_API int sqlite3mc_cipher_index(const char* cipherName);
280478280478
SQLITE_API const char* sqlite3mc_cipher_name(int cipherIndex);
280479+
SQLITE_API int sqlite3mc_cipher_name_copy(int cipherIndex, char* cipherName, int maxCipherNameSize);
280479280480
SQLITE_API int sqlite3mc_config(sqlite3* db, const char* paramName, int newValue);
280480280481
SQLITE_API int sqlite3mc_config_cipher(sqlite3* db, const char* cipherName, const char* paramName, int newValue);
280481280482
SQLITE_API unsigned char* sqlite3mc_codec_data(sqlite3* db, const char* zDbName, const char* paramName);
@@ -286409,7 +286410,7 @@ void RijndaelInvalidate(Rijndael* rijndael)
286409286410
/*
286410286411
** Name: libaegis.c
286411286412
** Purpose: Amalgamation of the AEGIS library
286412-
** Copyright: (c) 2024-2025 Ulrich Telle
286413+
** Copyright: (c) 2024-2026 Ulrich Telle
286413286414
** SPDX-License-Identifier: MIT
286414286415
*/
286415286416

@@ -286424,6 +286425,63 @@ void RijndaelInvalidate(Rijndael* rijndael)
286424286425
#define AEGIS_PRIVATE static
286425286426
#endif
286426286427

286428+
/* Namespacing to avoid conflicts with libsodium 1.0.21+ */
286429+
286430+
/* Base Implementation Structs */
286431+
#define aegis128l_implementation sqlite3mc_aegis128l_implementation
286432+
#define aegis128lx2_implementation sqlite3mc_aegis128lx2_implementation
286433+
#define aegis128lx4_implementation sqlite3mc_aegis128lx4_implementation
286434+
#define aegis256_implementation sqlite3mc_aegis256_implementation
286435+
#define aegis256x2_implementation sqlite3mc_aegis256x2_implementation
286436+
#define aegis256x4_implementation sqlite3mc_aegis256x4_implementation
286437+
286438+
/* Variants without hardware acceleration */
286439+
#define aegis128l_soft_implementation sqlite3mc_aegis128l_soft_implementation
286440+
#define aegis128x2_soft_implementation sqlite3mc_aegis128x2_soft_implementation
286441+
#define aegis128x4_soft_implementation sqlite3mc_aegis128x4_soft_implementation
286442+
#define aegis256_soft_implementation sqlite3mc_aegis256_soft_implementation
286443+
#define aegis256x2_soft_implementation sqlite3mc_aegis256x2_soft_implementation
286444+
#define aegis256x4_soft_implementation sqlite3mc_aegis256x4_soft_implementation
286445+
286446+
#define softaes_block_encrypt sqlite3mc_softaes_block_encrypt
286447+
286448+
/* Variants with support for AES and AVX instruction sets */
286449+
#define aegis128l_aesni_implementation sqlite3mc_aegis128l_aesni_implementation
286450+
#define aegis128x2_aesni_implementation sqlite3mc_aegis128x2_aesni_implementation
286451+
#define aegis128x4_aesni_implementation sqlite3mc_aegis128x4_aesni_implementation
286452+
#define aegis256_aesni_implementation sqlite3mc_aegis256_aesni_implementation
286453+
#define aegis256x2_aesni_implementation sqlite3mc_aegis256x2_aesni_implementation
286454+
#define aegis256x4_aesni_implementation sqlite3mc_aegis256x4_aesni_implementation
286455+
286456+
/* Variants with support for VAES and AVX2 instruction sets */
286457+
#define aegis128x2_avx2_implementation sqlite3mc_aegis128x2_avx2_implementation
286458+
#define aegis128x4_avx2_implementation sqlite3mc_aegis128x4_avx2_implementation
286459+
#define aegis256x2_avx2_implementation sqlite3mc_aegis256x2_avx2_implementation
286460+
#define aegis256x4_avx2_implementation sqlite3mc_aegis256x4_avx2_implementation
286461+
286462+
/* Variants with support for AVX512F instruction sets */
286463+
#define aegis128x4_avx512_implementation sqlite3mc_aegis128x4_avx512_implementation
286464+
#define aegis256x4_avx512_implementation sqlite3mc_aegis256x4_avx512_implementation
286465+
286466+
/* Variants with support for AltiVec instruction sets */
286467+
#define aegis128l_altivec_implementation sqlite3mc_aegis128l_altivec_implementation
286468+
#define aegis128x2_altivec_implementation sqlite3mc_aegis128x2_altivec_implementation
286469+
#define aegis128x4_altivec_implementation sqlite3mc_aegis128x4_altivec_implementation
286470+
#define aegis256_altivec_implementation sqlite3mc_aegis256_altivec_implementation
286471+
#define aegis256x2_altivec_implementation sqlite3mc_aegis256x2_altivec_implementation
286472+
#define aegis256x4_altivec_implementation sqlite3mc_aegis256x4_altivec_implementation
286473+
286474+
/* Variants with support for ARM Neon instruction sets */
286475+
#define aegis128l_armcrypto_implementation sqlite3mc_aegis128l_armcrypto_implementation
286476+
#define aegis128x2_armcrypto_implementation sqlite3mc_aegis128x2_armcrypto_implementation
286477+
#define aegis128x4_armcrypto_implementation sqlite3mc_aegis128x4_armcrypto_implementation
286478+
#define aegis256_armcrypto_implementation sqlite3mc_aegis256_armcrypto_implementation
286479+
#define aegis256x2_armcrypto_implementation sqlite3mc_aegis256x2_armcrypto_implementation
286480+
#define aegis256x4_armcrypto_implementation sqlite3mc_aegis256x4_armcrypto_implementation
286481+
286482+
/* Internal Tables (can conflict under -flto) */
286483+
#define _aes_lut sqlite3mc_aegis_aes_lut
286484+
286427286485
/* #include "common/cpu.h" */
286428286486
/*** Begin of #include "common/cpu.h" ***/
286429286487
/*
@@ -307708,12 +307766,10 @@ extern struct aegis128x4_implementation aegis128x4_avx512_implementation;
307708307766
#ifdef HAVE_VAESINTRIN_H
307709307767

307710307768
#ifdef __clang__
307711-
# if __clang_major__ >= 18
307712-
# pragma clang attribute push(__attribute__((target("vaes,avx512f,evex512"))), \
307713-
apply_to = function)
307769+
# if __clang_major__ >= 18 && __clang_major__ < 22
307770+
# pragma clang attribute push(__attribute__((target("aes,vaes,avx512f,evex512"))), apply_to=function)
307714307771
# else
307715-
# pragma clang attribute push(__attribute__((target("vaes,avx512f"))), \
307716-
apply_to = function)
307772+
# pragma clang attribute push(__attribute__((target("aes,vaes,avx512f"))), apply_to=function)
307717307773
# endif
307718307774
#elif defined(__GNUC__)
307719307775
# pragma GCC target("vaes,avx512f")
@@ -308855,12 +308911,10 @@ extern struct aegis256x4_implementation aegis256x4_avx512_implementation;
308855308911
#ifdef HAVE_VAESINTRIN_H
308856308912

308857308913
#ifdef __clang__
308858-
# if __clang_major__ >= 18
308859-
# pragma clang attribute push(__attribute__((target("vaes,avx512f,evex512"))), \
308860-
apply_to = function)
308914+
# if __clang_major__ >= 18 && __clang_major__ < 22
308915+
# pragma clang attribute push(__attribute__((target("vaes,avx512f,evex512"))), apply_to=function)
308861308916
# else
308862-
# pragma clang attribute push(__attribute__((target("vaes,avx512f"))), \
308863-
apply_to = function)
308917+
# pragma clang attribute push(__attribute__((target("vaes,avx512f"))), apply_to=function)
308864308918
# endif
308865308919
#elif defined(__GNUC__)
308866308920
# pragma GCC target("vaes,avx512f")
@@ -333299,7 +333353,7 @@ sqlite3mcConfigureSQLCipherVersion(sqlite3* db, int configDefault, int legacyVer
333299333353
** Purpose: Configuration of SQLite codecs
333300333354
** Author: Ulrich Telle
333301333355
** Created: 2020-03-02
333302-
** Copyright: (c) 2006-2024 Ulrich Telle
333356+
** Copyright: (c) 2006-2026 Ulrich Telle
333303333357
** License: MIT
333304333358
*/
333305333359

@@ -333481,18 +333535,17 @@ sqlite3mc_cipher_index(const char* cipherName)
333481333535
return (j < count && globalCodecDescriptorTable[j].m_name[0] != 0) ? j + 1 : -1;
333482333536
}
333483333537

333484-
SQLITE_API const char*
333485-
sqlite3mc_cipher_name(int cipherIndex)
333538+
static const char*
333539+
sqlite3mcFindCipherName(int cipherIndex)
333486333540
{
333487-
static char cipherName[CIPHER_NAME_MAXLEN] = "";
333541+
const char* cipherName = NULL;
333488333542
int count;
333489333543
int j;
333490333544
#ifndef SQLITE_OMIT_AUTOINIT
333491-
if( sqlite3_initialize() ) return cipherName;
333545+
if (sqlite3_initialize()) return NULL;
333492333546
#endif
333493333547
count = sqlite3mcGetGlobalCipherCount();
333494333548
j = 0;
333495-
cipherName[0] = '\0';
333496333549
if (cipherIndex > 0 && cipherIndex <= count)
333497333550
{
333498333551
for (j = 0; j < count && globalCodecDescriptorTable[j].m_name[0] != 0; ++j)
@@ -333501,13 +333554,57 @@ sqlite3mc_cipher_name(int cipherIndex)
333501333554
}
333502333555
if (j < count && globalCodecDescriptorTable[j].m_name[0] != 0)
333503333556
{
333504-
strncpy(cipherName, globalCodecDescriptorTable[j].m_name, CIPHER_NAME_MAXLEN - 1);
333505-
cipherName[CIPHER_NAME_MAXLEN - 1] = '\0';
333557+
cipherName = globalCodecDescriptorTable[j].m_name;
333506333558
}
333507333559
}
333508333560
return cipherName;
333509333561
}
333510333562

333563+
SQLITE_API const char*
333564+
sqlite3mc_cipher_name(int cipherIndex)
333565+
{
333566+
static char cipherName[CIPHER_NAME_MAXLEN] = "";
333567+
const char* globalCipherName = sqlite3mcFindCipherName(cipherIndex);
333568+
if (globalCipherName)
333569+
{
333570+
strncpy(cipherName, globalCipherName, CIPHER_NAME_MAXLEN - 1);
333571+
cipherName[CIPHER_NAME_MAXLEN - 1] = '\0';
333572+
}
333573+
else
333574+
{
333575+
cipherName[0] = '\0';
333576+
}
333577+
return cipherName;
333578+
}
333579+
333580+
SQLITE_API int
333581+
sqlite3mc_cipher_name_copy(int cipherIndex, char* cipherName, int maxCipherNameSize)
333582+
{
333583+
int ok = 1;
333584+
const char* globalCipherName = sqlite3mcFindCipherName(cipherIndex);
333585+
if (globalCipherName)
333586+
{
333587+
int cipherNameLen = (int)strlen(globalCipherName) + 1;
333588+
if (maxCipherNameSize >= cipherNameLen)
333589+
{
333590+
strncpy(cipherName, globalCipherName, maxCipherNameSize - 1);
333591+
cipherName[maxCipherNameSize - 1] = '\0';
333592+
}
333593+
else
333594+
{
333595+
/* Buffer too small, return negative value of minimum required buffer length */
333596+
ok = -cipherNameLen;
333597+
}
333598+
}
333599+
else
333600+
{
333601+
/* Invalid index */
333602+
cipherName[0] = '\0';
333603+
ok = 0;
333604+
}
333605+
return ok;
333606+
}
333607+
333511333608
static
333512333609
int checkParameterValue(const char* paramName, int value, const char* cipherName)
333513333610
{
@@ -334051,16 +334148,16 @@ sqlite3mcConfigureFromUri(sqlite3* db, const char* zDbName, int configDefault)
334051334148
{
334052334149
/* Check whether cipher is specified */
334053334150
const char* cipherName = sqlite3_uri_parameter(dbFileName, "cipher");
334054-
if (cipherName == NULL)
334151+
if (cipherName == NULL || cipherName[0] == 0)
334055334152
{
334056334153
int defaultCipherIndex = sqlite3mc_config(db, "cipher", -1);
334057334154
if (defaultCipherIndex > 0)
334058334155
{
334059-
cipherName = sqlite3mc_cipher_name(defaultCipherIndex);
334156+
cipherName = sqlite3mcFindCipherName(defaultCipherIndex);
334060334157
sqlite3mc_config(db, "cipher", defaultCipherIndex);
334061334158
}
334062334159
}
334063-
if (cipherName != NULL)
334160+
if (cipherName != NULL && cipherName[0] != 0)
334064334161
{
334065334162
int j = 0;
334066334163
CipherParams* cipherParams = NULL;

src/sqlite3mc_amalgamation.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
** Purpose: Header file for SQLite3 Multiple Ciphers support
44
** Author: Ulrich Telle
55
** Created: 2020-03-01
6-
** Copyright: (c) 2019-2024 Ulrich Telle
6+
** Copyright: (c) 2019-2026 Ulrich Telle
77
** License: MIT
88
*/
99

@@ -31,9 +31,9 @@
3131

3232
#define SQLITE3MC_VERSION_MAJOR 2
3333
#define SQLITE3MC_VERSION_MINOR 3
34-
#define SQLITE3MC_VERSION_RELEASE 1
34+
#define SQLITE3MC_VERSION_RELEASE 2
3535
#define SQLITE3MC_VERSION_SUBRELEASE 0
36-
#define SQLITE3MC_VERSION_STRING "SQLite3 Multiple Ciphers 2.3.1"
36+
#define SQLITE3MC_VERSION_STRING "SQLite3 Multiple Ciphers 2.3.2"
3737

3838
#endif /* SQLITE3MC_VERSION_H_ */
3939
/*** End of #include "sqlite3mc_version.h" ***/
@@ -14102,6 +14102,7 @@ SQLITE_API void sqlite3_activate_see(const char* zPassPhrase);
1410214102
SQLITE_API int sqlite3mc_cipher_count();
1410314103
SQLITE_API int sqlite3mc_cipher_index(const char* cipherName);
1410414104
SQLITE_API const char* sqlite3mc_cipher_name(int cipherIndex);
14105+
SQLITE_API int sqlite3mc_cipher_name_copy(int cipherIndex, char* cipherName, int maxCipherNameSize);
1410514106
SQLITE_API int sqlite3mc_config(sqlite3* db, const char* paramName, int newValue);
1410614107
SQLITE_API int sqlite3mc_config_cipher(sqlite3* db, const char* cipherName, const char* paramName, int newValue);
1410714108
SQLITE_API unsigned char* sqlite3mc_codec_data(sqlite3* db, const char* zDbName, const char* paramName);

src/wxsqlite3.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5696,22 +5696,28 @@ wxSQLite3Cipher::GetCipher(wxSQLite3Database& db)
56965696
{
56975697
sqlite3* dbHandle = (sqlite3*) GetDatabaseHandle(db);
56985698
int cipherType = sqlite3mc_config(dbHandle, "cipher", -1);
5699-
return GetCipherType(sqlite3mc_cipher_name(cipherType));
5699+
char cipherName[32] = "";
5700+
int rc = sqlite3mc_cipher_name_copy(cipherType, cipherName, 32);
5701+
return GetCipherType(wxString((rc == 1) ? cipherName : ""));
57005702
}
57015703

57025704
wxSQLite3CipherType
57035705
wxSQLite3Cipher::GetCipherDefault(wxSQLite3Database& db)
57045706
{
57055707
sqlite3* dbHandle = (sqlite3*) GetDatabaseHandle(db);
57065708
int cipherType = sqlite3mc_config(dbHandle, "default:cipher", -1);
5707-
return GetCipherType(sqlite3mc_cipher_name(cipherType));
5709+
char cipherName[32] = "";
5710+
int rc = sqlite3mc_cipher_name_copy(cipherType, cipherName, 32);
5711+
return GetCipherType(wxString((rc == 1) ? cipherName : ""));
57085712
}
57095713

57105714
wxSQLite3CipherType
57115715
wxSQLite3Cipher::GetGlobalCipherDefault()
57125716
{
57135717
int cipherType = sqlite3mc_config(0, "default:cipher", -1);
5714-
return GetCipherType(sqlite3mc_cipher_name(cipherType));
5718+
char cipherName[32] = "";
5719+
int rc = sqlite3mc_cipher_name_copy(cipherType, cipherName, 32);
5720+
return GetCipherType(wxString((rc == 1) ? cipherName : ""));
57155721
}
57165722

57175723
int

0 commit comments

Comments
 (0)