]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Have sqlite3_value/column_text/blob_v2() unconditionally return MISUSE for a NULL...
authorstephan <stephan@noemail.net>
Tue, 1 Jul 2025 20:56:49 +0000 (20:56 +0000)
committerstephan <stephan@noemail.net>
Tue, 1 Jul 2025 20:56:49 +0000 (20:56 +0000)
FossilOrigin-Name: c8edbfc7e8b57e7b1c9a4a5cdfdc00cd7216b6ccc36ff983f85ad94865f6288f

ext/wasm/tester1.c-pp.js
manifest
manifest.uuid
src/sqlite.h.in
src/vdbeapi.c

index 9e332b94646e8a2a851e19807ed6c567b14c3e5e..50bf279b611a5d91557f494c296588888c8da1de 100644 (file)
@@ -3415,8 +3415,6 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
         checkRc('SQLITE_OK', "column null pnOut",
                 capi.sqlite3_column_text_v2(q, 1, ppOut, 0, 0));
 
-        /* Some of the following only applies because we build with
-           SQLITE_ENABLE_API_ARMOR. */
         checkRc('SQLITE_MISUSE', "value null ppOut",
                 capi.sqlite3_value_text_v2(sv, 0, pnOut, 0));
         checkRc('SQLITE_MISUSE', "value null arg0",
index 736e1bd96875a166179c104720f3c993369f4a65..af8afe791487c909fc206b3cfaa1e5e4890cbcd1 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Parameter\snumber\sdoc\scorrections\sfor\sthe\sprevious\scheck-in.
-D 2025-07-01T18:38:02.421
+C Have\ssqlite3_value/column_text/blob_v2()\sunconditionally\sreturn\sMISUSE\sfor\sa\sNULL\sinput\sobject\sor\soutput\starget,\srather\sthan\sonly\swhen\sAPI_ARMOR\sis\sin\seffect.\sThis\sis\sdebatable.
+D 2025-07-01T20:56:49.962
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -698,7 +698,7 @@ F ext/wasm/test-opfs-vfs.html 1f2d672f3f3fce810dfd48a8d56914aba22e45c6834e262555
 F ext/wasm/test-opfs-vfs.js 1618670e466f424aa289859fe0ec8ded223e42e9e69b5c851f809baaaca1a00c
 F ext/wasm/tester1-worker.html ebc4b820a128963afce328ecf63ab200bd923309eb939f4110510ab449e9814c
 F ext/wasm/tester1.c-pp.html 1c1bc78b858af2019e663b1a31e76657b73dc24bede28ca92fbe917c3a972af2
-F ext/wasm/tester1.c-pp.js 360ef22cf02a48192dbd4c33172a37d6656bcedda11335775bd681ec50b68bbb
+F ext/wasm/tester1.c-pp.js 80f70bf0f6fcf9d49ab0edbba430c27dc2a6cdd1d8f718732c71fc131d686aee
 F ext/wasm/tests/opfs/concurrency/index.html 657578a6e9ce1e9b8be951549ed93a6a471f4520a99e5b545928668f4285fb5e
 F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65ad09f510589c779b7cc6a803a88
 F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2
@@ -787,7 +787,7 @@ F src/resolve.c d40fe18d7c2fd0339f5846ffcf7d6809866e380acdf14c76fb2af87e9fe13f64
 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97
 F src/select.c 882d739e0d5e6c7a8b46a3cca3ada37fe1a56301f1360d6b141312c666bbe482
 F src/shell.c.in 4f14a1f5196b6006abc8e73cc8fd6c1a62cf940396f8ba909d6711f35f074bb6
-F src/sqlite.h.in e2687f6ea0c9b1bfb2ec1d3f976c18b82ecc536f4db175ec2debb2b84514f074
+F src/sqlite.h.in a7eadf009abe0ed994b1a73dde800a5708ca25ee17d145bbe18f0a800321dc1e
 F src/sqlite3.rc 015537e6ac1eec6c7050e17b616c2ffe6f70fca241835a84a4f0d5937383c479
 F src/sqlite3ext.h 0bfd049bb2088cc44c2ad54f2079d1c6e43091a4e1ce8868779b75f6c1484f1e
 F src/sqliteInt.h 21c089759415895c86220d35c22cd17fdc6ca27653e1ec0c744d1e6808d0545a
@@ -855,7 +855,7 @@ F src/vacuum.c 1bacdd0a81d2b5dc1c508fbf0d938c89fa78dd8d5b46ec92686d44030d4f4789
 F src/vdbe.c 7e29623ca387880b8893e69135a0ff240c3dcaf0710f7a46a5f95b062cf93883
 F src/vdbe.h 93761ed7c6b8bc19524912fd9b9b587d41bf4f1d0ade650a00dadc10518d8958
 F src/vdbeInt.h 0bc581a9763be385e3af715e8c0a503ba8422c2b7074922faf4bb0d6ae31b15e
-F src/vdbeapi.c 4109e9afb11b468eadab6c5b78c3d1ae213f5fa2112ddff925c2972ee5a8f276
+F src/vdbeapi.c 8507114873bd142f9ee7b0e1ecfe02c7d2275062bbb17b9998823045a86b2213
 F src/vdbeaux.c fd2c6b19a8892c31a2adc719f156f313560f9cc490cdbd04ff08fdae5d7aedb7
 F src/vdbeblob.c b1b4032cac46b41e44b957c4d00aee9851f862dfd85ecb68116ba49884b03dfd
 F src/vdbemem.c 08633d0ac68585c83176bc9f336424d9e97fcb50827f71b3bce9746ad6950a56
@@ -2208,8 +2208,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350
 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
 F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 60614fed447270b8342f6ee04f4ed9d5c81393c5344a917820a0a7e571de19a9
-R 5c5a95c9983dd3d0270a9337c5c9ff3c
+P 97b06c4594dc3d056334dfba6f310fb6d058456adde6abacfef29f0244637d39
+R 6b6629f04e602234dd8ac3be91aa7341
 U stephan
-Z 713328a34cf705fec53b4538fbdfe5de
+Z 9fe6eb65e143d983313efbc0f20ad387
 # Remove this line to create a well-formed Fossil manifest.
index 9c898ceaba866f2aa98524262732b527b856368b..20c1f9b3ad5e10b64ec5f7074140683c432f7d4b 100644 (file)
@@ -1 +1 @@
-97b06c4594dc3d056334dfba6f310fb6d058456adde6abacfef29f0244637d39
+c8edbfc7e8b57e7b1c9a4a5cdfdc00cd7216b6ccc36ff983f85ad94865f6288f
index 2f65fc5a7858ae791bbfb17957a1d77cbb26522b..d4953d017b648009a2fed8e49e063acebe56290a 100644 (file)
@@ -5888,11 +5888,13 @@ SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int64,int),
 ** <b>Summary:</b>
 ** <blockquote><table border=0 cellpadding=0 cellspacing=0>
 ** <tr><td><b>sqlite3_value_blob</b><td>&rarr;<td>BLOB value
+** <tr><td><b>sqlite3_value_blob_v2</b><td>&rarr;<td>BLOB value
 ** <tr><td><b>sqlite3_value_double</b><td>&rarr;<td>REAL value
 ** <tr><td><b>sqlite3_value_int</b><td>&rarr;<td>32-bit INTEGER value
 ** <tr><td><b>sqlite3_value_int64</b><td>&rarr;<td>64-bit INTEGER value
 ** <tr><td><b>sqlite3_value_pointer</b><td>&rarr;<td>Pointer value
 ** <tr><td><b>sqlite3_value_text</b><td>&rarr;<td>UTF-8 TEXT value
+** <tr><td><b>sqlite3_value_text_v2</b><td>&rarr;<td>UTF-8 TEXT value
 ** <tr><td><b>sqlite3_value_text16</b><td>&rarr;<td>UTF-16 TEXT value in
 ** the native byteorder
 ** <tr><td><b>sqlite3_value_text16be</b><td>&rarr;<td>UTF-16be TEXT value
@@ -5993,8 +5995,10 @@ SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int64,int),
 ** errors:
 **
 ** <ul>
+** <li> sqlite3_value_blob_v2()
 ** <li> sqlite3_value_blob()
 ** <li> sqlite3_value_text()
+** <li> sqlite3_value_text_v2()
 ** <li> sqlite3_value_text16()
 ** <li> sqlite3_value_text16le()
 ** <li> sqlite3_value_text16be()
@@ -6008,6 +6012,10 @@ SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int64,int),
 ** by invoking the [sqlite3_errcode()] immediately after the suspect
 ** return value is obtained and before any
 ** other SQLite interface is called on the same [database connection].
+**
+** The previous paragraph does not apply to the text_v2 and blob_v2
+** interfaces, which return SQLITE_NOMEM to the client for
+** out-of-memory conditions.
 */
 const void *sqlite3_value_blob(sqlite3_value*);
 int sqlite3_value_blob_v2(sqlite3_value*, const void **, int*, int*);
index ecebe570f3e94acc470db636b979df15b5982d31..a1af6087bcb72bb44a4906dab1742d07c684d584 100644 (file)
@@ -194,11 +194,7 @@ const void *sqlite3_value_blob(sqlite3_value *pVal){
 int sqlite3_value_blob_v2(sqlite3_value *pVal, const void **pOut,
                           int *pnOut, int *pType){
   Mem *p = (Mem*)pVal;
-#ifdef SQLITE_ENABLE_API_ARMOR
-  if( pVal==0 || pOut==0 ){
-    return SQLITE_MISUSE_BKPT;
-  }
-#endif
+  if( pVal==0 || pOut==0 ) return SQLITE_MISUSE_BKPT;
   if( p->flags & (MEM_Blob|MEM_Str) ){
     if( ExpandBlob(p)!=SQLITE_OK ){
       assert( p->flags==MEM_Null && p->z==0 );
@@ -209,10 +205,9 @@ int sqlite3_value_blob_v2(sqlite3_value *pVal, const void **pOut,
     if( pnOut ) *pnOut = p->n;
     if( pType ) *pType = sqlite3_value_type(pVal);
     return 0;
-  }else{
-    return sqlite3_value_text_v2(pVal, (const unsigned char **)pOut,
-                                 pnOut, pType);
   }
+  return sqlite3_value_text_v2(pVal, (const unsigned char **)pOut,
+                               pnOut, pType);
 }
 int sqlite3_value_bytes(sqlite3_value *pVal){
   return sqlite3ValueBytes(pVal, SQLITE_UTF8);
@@ -253,10 +248,9 @@ int sqlite3_value_text_v2(sqlite3_value *pVal,
                           const unsigned char **pOut,
                           int *pnOut, int *pType){
   int n = 0;
-  return (pVal && pOut)
-    ? sqlite3ValueTextV2(pVal, SQLITE_UTF8, (const void **)pOut,
-                         pnOut ? pnOut : &n, pType)
-    : SQLITE_MISUSE_BKPT;
+  if( pVal==0 || pOut==0 ) return SQLITE_MISUSE_BKPT;
+  return sqlite3ValueTextV2(pVal, SQLITE_UTF8, (const void **)pOut,
+                            pnOut ? pnOut : &n, pType);
 }
 #ifndef SQLITE_OMIT_UTF16
 const void *sqlite3_value_text16(sqlite3_value* pVal){