]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
The sqlite3_str_new() interface never returns NULL, even after an OOM.
authordrh <>
Wed, 15 Apr 2026 14:41:25 +0000 (14:41 +0000)
committerdrh <>
Wed, 15 Apr 2026 14:41:25 +0000 (14:41 +0000)
Code that uses that interface should invoke sqlite3_str_errcode() to see
if an OOM has occurred.

FossilOrigin-Name: cb910047edc591102dd4ed0d57c863b366981b8aa1d3085d5f95b1fbbabf6c31

ext/misc/analyze.c
manifest
manifest.uuid
src/func.c

index e84c5db62abc557d20a24d628c146cbd23805007..3bf180aeaf2e9b05605b28812a9e4e69d5f63a88 100644 (file)
@@ -433,7 +433,10 @@ static void analyzeFunc(
   s.db = sqlite3_context_db_handle(context);
   s.context = context;
   s.pOut = sqlite3_str_new(0);
-  if( s.pOut==0 ){ analysisError(&s, 0); return; }
+  if( sqlite3_str_errcode(s.pOut) ){
+    analysisError(&s, 0);
+    return;
+  }
   s.zSchema = (const char*)sqlite3_value_text(argv[0]);
   if( s.zSchema==0 ){
     s.zSchema = "main";
index 87cdab02c58b0f8ac13b417c834729aef5bca16e..2b3931afffcca30d0aefbf4cd1476ff4e8ed7ade 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Bug\sfix\sin\ssqlite3_str_free():\sDo\snot\scrash\sif\scalled\son\san\ssqlite3_str\nobject\sreturned\sfrom\ssqlite3_str_new()\sfollowing\san\sOOM.
-D 2026-04-15T14:17:58.981
+C The\ssqlite3_str_new()\sinterface\snever\sreturns\sNULL,\seven\safter\san\sOOM.\nCode\sthat\suses\sthat\sinterface\sshould\sinvoke\ssqlite3_str_errcode()\sto\ssee\nif\san\sOOM\shas\soccurred.
+D 2026-04-15T14:41:25.480
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -358,7 +358,7 @@ F ext/jni/src/tests/000-001-ignored.test e17e874c6ab3c437f1293d88093cf06286083b6
 F ext/jni/src/tests/900-001-fts.test bf0ce17a8d082773450e91f2388f5bbb2dfa316d0b676c313c637a91198090f0
 F ext/misc/README.md 6243cdc4d7eb791c41ef0716f3980b8b5f6aa8c61ff76a3958cbf0031c6ebfa7
 F ext/misc/amatch.c 8d237cc014b3736922c26a76a451050d244aa4980c47c531f368f817b1e77b49
-F ext/misc/analyze.c 5831f69723f13dac2bc9de8f0ad8af802231a5bfd8fb41c8d9b5253aeb02faf3
+F ext/misc/analyze.c 13caf932d591d7c0ce3f0470023a5c835aa24caddec673c41d296ac89de98220
 F ext/misc/anycollseq.c 5ffdfde9829eeac52219136ad6aa7cd9a4edb3b15f4f2532de52f4a22525eddb
 F ext/misc/appendvfs.c 9642c7a194a2a25dca7ad3e36af24a0a46d7702168c4ad7e59c9f9b0e16a3824
 F ext/misc/base64.c 1445761667c16356e827fc6418294c869468be934429aaa8315035e76dd58acf
@@ -689,7 +689,7 @@ F src/delete.c 1f2268d6fe3c78fc1bf794ba65d7026498b78e2342ffaf85825dedae546e6fde
 F src/expr.c 68400681c5f6e41231d2c85abf6bb432aeeb2e36c4abdf90eb7b78551a5ce0f3
 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
 F src/fkey.c 931f74cec1dc8038a0217ef340c91ce147dd1bbed08dc40c47ee0ec6edfffb08
-F src/func.c 706ac012bf87d8ad7416a56a1d2b1f19e5dea03506a4606a01aa9d3bacf392c7
+F src/func.c 5d3bff9431e46cc552b189335c39cd23592202f81aae5b786e5c9424a2d2e771
 F src/global.c a19e4b1ca1335f560e9560e590fc13081e21f670643367f99cb9e8f9dc7d615b
 F src/hash.c 03c8c0f4be9e8bcb6de65aa26d34a61d48a9430747084a69f9469fbb00ea52ca
 F src/hash.h 46b92795a95bfefb210f52f0c316e9d7cdbcdd7e7fcfb0d8be796d3a5767cddf
@@ -2199,8 +2199,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
 F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
 F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P abd94554d24122f0e0c3b7b36e5846e8c7aa0dddbddd9aae35b3f6ae6ab283c0
-R bb786b742a321483de5f87d2e41f6d12
+P 92d8ac0c4938e43b00111b43630ecfa91c30e5200ca03937a84f4b50bd1a13b3
+R 2044f397ccfeb7d1bf77600ef85df643
 U drh
-Z e43a1213c0ba328d95f725f01a15a92f
+Z e3131e0c1c5850c27f08aad1e0cda310
 # Remove this line to create a well-formed Fossil manifest.
index 83a3bc990f61d3f5af54f87f211b12f4f6e7e6e2..3edd99b2e117d95115695ee2189b9f08241281b8 100644 (file)
@@ -1 +1 @@
-92d8ac0c4938e43b00111b43630ecfa91c30e5200ca03937a84f4b50bd1a13b3
+cb910047edc591102dd4ed0d57c863b366981b8aa1d3085d5f95b1fbbabf6c31
index 4260f3e72feef418f59ad2f62b058601a26575f0..f9a85685a2f0053783c494b1bc353a7fd58621e7 100644 (file)
@@ -3106,7 +3106,7 @@ static void filestatFunc(
     assert( pPager!=0 );
     fd = sqlite3PagerFile(pPager);
     pStr = sqlite3_str_new(db);
-    if( pStr==0 ){
+    if( sqlite3_str_errcode(pStr) ){
       sqlite3_result_error_nomem(context);
     }else{
       sqlite3_str_append(pStr, "{\"db\":", 6);
@@ -3209,7 +3209,7 @@ static void parseuriFunc(
   flgs = (unsigned int)sqlite3_value_int(argv[1]);
   rc = sqlite3ParseUri(zVfs, zUri, &flgs, &pVfs, &zFile, &zErr);
   pResult = sqlite3_str_new(0);
-  if( pResult ){
+  if( !sqlite3_str_errcode(pResult) ){
     int i;
     sqlite3_str_appendf(pResult, "rc=%d", rc);
     sqlite3_str_appendf(pResult, ", flags=0x%x", flgs);