]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix some integer overflow warnings in the base64 and base85 extensions.
authordan <Dan Kennedy>
Tue, 7 Oct 2025 15:14:03 +0000 (15:14 +0000)
committerdan <Dan Kennedy>
Tue, 7 Oct 2025 15:14:03 +0000 (15:14 +0000)
FossilOrigin-Name: 06b4bd2aba22c57f5a5fed606c3bee225dee6fdc13bb16cc58194040ef0d7d85

ext/misc/base64.c
ext/misc/base85.c
manifest
manifest.uuid
src/func.c
test/basexx1.test
test/func9.test
test/shell1.test

index 4a463a72245a392dc3649be08f911d814ced9213..2da767bb0dbce2c5090daef2a1b7a601ecc82dc7 100644 (file)
@@ -207,7 +207,8 @@ static u8* fromBase64( char *pIn, int ncIn, u8 *pOut ){
 
 /* This function does the work for the SQLite base64(x) UDF. */
 static void base64(sqlite3_context *context, int na, sqlite3_value *av[]){
-  int nb, nv = sqlite3_value_bytes(av[0]);
+  sqlite3_int64 nb;
+  sqlite3_int64 nv = sqlite3_value_bytes(av[0]);
   sqlite3_int64 nc;
   int nvMax = sqlite3_limit(sqlite3_context_db_handle(context),
                             SQLITE_LIMIT_LENGTH, -1);
index eaf1732c46dd60c8c64a12d8c421203dd72ef5f2..63245e2e4aeeccb8856674098de77a36e5e9a797 100644 (file)
@@ -286,7 +286,7 @@ static void is_base85(sqlite3_context *context, int na, sqlite3_value *av[]){
 
 /* This function does the work for the SQLite base85(x) UDF. */
 static void base85(sqlite3_context *context, int na, sqlite3_value *av[]){
-  int nb, nc, nv = sqlite3_value_bytes(av[0]);
+  sqlite3_int64 nb, nc, nv = sqlite3_value_bytes(av[0]);
   int nvMax = sqlite3_limit(sqlite3_context_db_handle(context),
                             SQLITE_LIMIT_LENGTH, -1);
   char *cBuf;
index 12428b2b9b2dc44c4fb154f7c0fca2053165253f..bb935ce3d0fbbe3bae5cfb68f1bd2a06c7652ec7 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sa\sminor\sproblem\swith\sbuilding\ssqlite3.c\swithout\smanifest.tags.
-D 2025-10-06T20:11:18.233
+C Fix\ssome\sinteger\soverflow\swarnings\sin\sthe\sbase64\sand\sbase85\sextensions.
+D 2025-10-07T15:14:03.092
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -357,8 +357,8 @@ F ext/misc/README.md de71b57b507ab78c03f0d2aceb85fef88a658119d314700391b35a59648
 F ext/misc/amatch.c 2db45b1499b275d8340af6337a13d6216e4ceb2ddb41f4042b9801be7b5e593d
 F ext/misc/anycollseq.c 5ffdfde9829eeac52219136ad6aa7cd9a4edb3b15f4f2532de52f4a22525eddb
 F ext/misc/appendvfs.c 9642c7a194a2a25dca7ad3e36af24a0a46d7702168c4ad7e59c9f9b0e16a3824
-F ext/misc/base64.c 389c958ae3ae633d6282b9285afd22fbceb267d900cf4566c532fc7854912f4f
-F ext/misc/base85.c a70c885c5c9350261ea6e7b166038eab21a09cf4fceae856ce41fae9c2213b60
+F ext/misc/base64.c 8dc0a08cee11722822858a62625f1b63e5d5f1adac1cf4492d5732b571e37aa0
+F ext/misc/base85.c ff54cc676c6ec86231f75ecc86ea45416fcb69751dfb79690d5f5da5f7d39867
 F ext/misc/basexx.c 89ad6b76558efbceb627afd5e2ef1d84b2e96d9aaf9b7ecb20e3d00b51be6fcf
 F ext/misc/blobio.c a867c4c4617f6ec223a307ebfe0eabb45e0992f74dd47722b96f3e631c0edb2a
 F ext/misc/btreeinfo.c 8f5e6da2c82ec2f06ee0216e922370a436dafdbb06ffa7a552203515ff9e7ddf
@@ -689,7 +689,7 @@ F src/delete.c 03a77ba20e54f0f42ebd8eddf15411ed6bdb06a2c472ac4b6b336521bf7cea42
 F src/expr.c 4d63c8f6d50fe20637de8bdaf57757a0e424e4ac5e2c3313e621d64727a48a1c
 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
 F src/fkey.c 928ed2517e8732113d2b9821aa37af639688d752f4ea9ac6e0e393d713eeb76f
-F src/func.c de47a8295503aa130baae5e6d9868ecf4f7c4dbffa65d83ad1f70bdbac0ee2d6
+F src/func.c 8a42be1ee66e6257858d0de257033344bf143dbcf2cead69c4b4ccab7976f6b1
 F src/global.c a19e4b1ca1335f560e9560e590fc13081e21f670643367f99cb9e8f9dc7d615b
 F src/hash.c 73934a7f7ab1cb110614a9388cb516893b0cf5b7b69e4fd1a0780ac4ce166be7
 F src/hash.h 46b92795a95bfefb210f52f0c316e9d7cdbcdd7e7fcfb0d8be796d3a5767cddf
@@ -899,7 +899,7 @@ F test/backup_ioerr.test 4c3c7147cee85b024ecf6e150e090c32fdbb5135
 F test/backup_malloc.test 0c9abdf74c51e7bedb66d504cd684f28d4bd4027
 F test/badutf.test d5360fc31f643d37a973ab0d8b4fb85799c3169f
 F test/badutf2.test f310fd3b24a491b6b77bccdf14923b85d6ebcce751068c180d93a6b8ff854399
-F test/basexx1.test 655ef510338820fe58a860fae66e13a0d44bb47d842713936431296aca992473
+F test/basexx1.test 4ae6ddbd92a7ebcabb5d844664c3e755d29fb69c8ddcf0c8d59bbe4e07c23919
 F test/bc_common.tcl c70b896d1d4ce72f769d2c7c1fc15b2cb07559eb2093f2736c8ca51664b29ff5
 F test/bestindex1.test 856a453dff8c68b4568601eed5a8b5e20b4763af9229f3947c215729ed878db0
 F test/bestindex2.test 394ff8fbf34703391247116d6a44e1c50ee7282236ee77909044573cefc37bc0
@@ -1228,7 +1228,7 @@ F test/func5.test 863e6d1bd0013d09c17236f8a13ea34008dd857d87d85a13a673960e4c25d8
 F test/func6.test 3bc89ec0f2605736d3a118f43d25ef58115a7db4dba8ae939a363917d815c0bb
 F test/func7.test 7e009275f52c52954c8c028fdb62f8bc16cc47276fcc8753c1d2b22c6e074598
 F test/func8.test c4e2ecacf9f16e47a245e7a25fbabcc7e78f9c7c41a80f158527cdfdc6dd299d
-F test/func9.test d56aa5b0f7d0e4fec01cb19b797671221dece2b00714bb71679588666be7530d
+F test/func9.test 8901e97e2c3a52e5ea06a0f0c6199212957c7d6c3f727056a96abf5b81928512
 F test/fuzz-oss1.test 514dcabb24687818ea949fa6760229eaacad74ca70157743ef36d35bbe01ffb0
 F test/fuzz.test 819ea7e483bcee91209aacbe6f9eaf3287baa1841479ee5f639f57c5e7c42b86
 F test/fuzz2.test 76dc35b32b6d6f965259508508abce75a6c4d7e1
@@ -1598,7 +1598,7 @@ F test/sharedA.test 64bdd21216dda2c6a3bd3475348ccdc108160f34682c97f2f51c19fc0e21
 F test/sharedB.test 1a84863d7a2204e0d42f2e1606577c5e92e4473fa37ea0f5bdf829e4bf8ee707
 F test/shared_err.test 32634e404a3317eeb94abc7a099c556a346fdb8fb3858dbe222a4cbb8926a939
 F test/sharedlock.test 5ede3c37439067c43b0198f580fd374ebf15d304
-F test/shell1.test d41257103cf762e1d43f1d07286ac65ed32c5430a19851029bfe06671f5e19fe
+F test/shell1.test 396c04132628fe1c627fd4807a93a116f712cfb1cfe9ca5d553b1c89361a899f
 F test/shell2.test ab23f01ea2347e4b72bb2399af7ee82aa00f9c059141749f7c4064abca5ad728
 F test/shell3.test 603b448e917537cf77be0f265c05c6f63bc677c63a533c8e96aae923b56f4a0e
 F test/shell4.test ad7eee983b5e7f1dd92d8c87bc0f39474086bc32c980c00f3934c54aabc636a2
@@ -2168,8 +2168,8 @@ F tool/version-info.c 33d0390ef484b3b1cb685d59362be891ea162123cea181cb8e6d2cf6dd
 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
 F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 56f6d6c538fd4e0da8a7c4e4c4d1bd0b8cd83ffd126ae24daaf30fdf808e1a78
-R 20d62e28be548b1a5af474351cc93cdb
+P 140f0f9fd389c99dc6ba1fdca7658c43d8dc3f3c128484fbafa7d67c33fe1001
+R cf81bdb819f27ca4898e35dd394530dc
 U dan
-Z 7359802023ce6bc0827407fb2686474b
+Z 1f78991a2b9399481ea3fec3e745ccca
 # Remove this line to create a well-formed Fossil manifest.
index 453d41285f2bbc333409b30c95e325b75054aca0..8e38e24317815d26a46c6bf69ad0f9f4c92cc14b 100644 (file)
@@ -1 +1 @@
-140f0f9fd389c99dc6ba1fdca7658c43d8dc3f3c128484fbafa7d67c33fe1001
+06b4bd2aba22c57f5a5fed606c3bee225dee6fdc13bb16cc58194040ef0d7d85
index b0a1359b7ca9fc1a2b3b15213e6001ecbda5a230..49cb197b53ace002d820c072301a3c8f5889ada2 100644 (file)
@@ -1156,7 +1156,7 @@ void sqlite3QuoteValue(StrAccum *pStr, sqlite3_value *pValue, int bEscape){
 */
 static int isNHex(const char *z, int N, u32 *pVal){
   int i;
-  int v = 0;
+  u32 v = 0;
   for(i=0; i<N; i++){
     if( !sqlite3Isxdigit(z[i]) ) return 0;
     v = (v<<4) + sqlite3HexToInt(z[i]);
index 69c1f675be6beade76137440415ea1985efffb10..b34b25ff366e67ea0b1ef815932e06e063824830 100644 (file)
@@ -158,4 +158,11 @@ do_execsql_test 117 {
   SELECT num FROM bs WHERE base85(base85(b))!=b;
 } {}
 
+do_catchsql_test 118 {
+  SELECT base64(zeroblob(2000_000_000))
+} {/1.*too big.*/}
+do_catchsql_test 119 {
+  SELECT base85(zeroblob(2000_000_000))
+} {/1.*too big.*/}
+
 finish_test
index 2383b76f67edd53a8e13e72aa476373e8363afef..fd2db55c199567d4e9bc497850a1e4e7b0b7f1fd 100644 (file)
@@ -50,4 +50,8 @@ do_execsql_test func9-220 {
   SELECT format('%#Q',unistr('G\u00e4ste'));
 } {'Gäste'}
 
+do_execsql_test func9-300 {
+  SELECT hex( unistr('\UFFFFFFFF') )
+} {F7BFBFBF}
+
 finish_test
index 8cf11b240952b7523e977b164e2e6b9e6821b4b3..8c24655820967aae0a4629fd90b00f47a88829b3 100644 (file)
@@ -1304,4 +1304,22 @@ select base64(base64(cast('digity-doo' as blob))),
 }
 } {0 digity-doo|digity-doo}
 
+#----------------------------------------------------------------------------
+# Test cases shell1-11.*: 
+#
+do_test shell1-11.1 {
+  catchcmd :memory: {
+.mode list
+.header off
+select base64(zeroblob(2000000000));
+}
+} {/1.*too big.*/}
+do_test shell1-11.2 {
+  catchcmd :memory: {
+.mode list
+.header off
+select base85(zeroblob(2000000000));
+}
+} {/1.*too big.*/}
+
 finish_test