]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Improve defenses in QRF against trying to run the same prepared statement master
authordrh <>
Fri, 10 Apr 2026 18:14:33 +0000 (18:14 +0000)
committerdrh <>
Fri, 10 Apr 2026 18:14:33 +0000 (18:14 +0000)
twice, concurrently.

FossilOrigin-Name: 6ab6f622be3e1ad93166d139b5fccf9628c86d1c14c6dfb4464cb8cf52c94785

ext/qrf/qrf.c
manifest
manifest.uuid

index 4d559581cbdabd20b0ef455cf0243fa63e7e412c..c0bab3ca2101f51d40b18a27f2a4c68f931cccee 100644 (file)
@@ -2801,7 +2801,8 @@ qrf_reinit:
     case QRF_STYLE_Eqp: {
       int expMode = sqlite3_stmt_isexplain(p->pStmt);
       if( expMode!=2 ){
-        sqlite3_stmt_explain(p->pStmt, 2);
+        int rc = sqlite3_stmt_explain(p->pStmt, 2);
+        if( rc ){ qrfError(p, SQLITE_ERROR, sqlite3_errstr(rc)); }
         p->expMode = expMode+1;
       }
       break;
@@ -2809,7 +2810,8 @@ qrf_reinit:
     case QRF_STYLE_Explain: {
       int expMode = sqlite3_stmt_isexplain(p->pStmt);
       if( expMode!=1 ){
-        sqlite3_stmt_explain(p->pStmt, 1);
+        int rc = sqlite3_stmt_explain(p->pStmt, 1);
+        if( rc ){ qrfError(p, SQLITE_ERROR, sqlite3_errstr(rc)); }
         p->expMode = expMode+1;
       }
       break;
@@ -2968,6 +2970,7 @@ int sqlite3_format_query_result(
 
   if( pStmt==0 ) return SQLITE_OK;       /* No-op */
   if( pSpec==0 ) return SQLITE_MISUSE;
+  if( sqlite3_stmt_busy(pStmt) ) return SQLITE_BUSY;
   qrfInitialize(&qrf, pStmt, pSpec, pzErr);
   switch( qrf.spec.eStyle ){
     case QRF_STYLE_Box:
index 815dc2c8fc0d816dfec532c934be12ca8fec03bf..84804b900adbdebeafe170bb30e182fdc2e550b6 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C API\sdoc\scorrection\sfor\ssqlite3_js_retry_busy().\sNo\scode\schanges.
-D 2026-04-10T17:55:31.823
+C Improve\sdefenses\sin\sQRF\sagainst\strying\sto\srun\sthe\ssame\sprepared\sstatement\ntwice,\sconcurrently.
+D 2026-04-10T18:14:33.530
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -421,7 +421,7 @@ F ext/misc/zipfile.c 5a583b5e72b4d777dc9f845529e6bd185d58024b633aafc93588679c787
 F ext/misc/zorder.c bddff2e1b9661a90c95c2a9a9c7ecd8908afab5763256294dd12d609d4664eee
 F ext/qrf/README.md 9e644615d7d7b77ef7e9db798765679e50c5ed12eda48bce21c9ef9eb4715e9d
 F ext/qrf/dev-notes.md e68a6d91ce4c7eb296ef2daadc2bb79c95c317ad15b9fafe40850c67b29c2430
-F ext/qrf/qrf.c 9bef1f01e0c33a8693a9a7c1b666b8dee1aa60b8bc880d562eb4dfff551a6009
+F ext/qrf/qrf.c 64203184d9fc6ee75439fb6da70fd51dc7aaf3243600e52aa87d18ea1e4d6e73
 F ext/qrf/qrf.h fbb223ff5789b324b3e9c22e787e4c1f53e217cff7cc5a243164d4b2e8410f4b
 F ext/rbu/rbu.c 801450b24eaf14440d8fd20385aacc751d5c9d6123398df41b1b5aa804bf4ce8
 F ext/rbu/rbu1.test 25870dd7db7eb5597e2b4d6e29e7a7e095abf332660f67d89959552ce8f8f255
@@ -2197,8 +2197,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
 F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
 F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P a2f84c56316ea746c134aa6e5a2b46021f67c6642161beae8122f73daeddda92
-R 6611d7fbd9fda02d49f6e05c79b9740d
-U stephan
-Z 0028d78facb7d9a8650001d65bd33435
+P 749c537812b907164b7e7ad1fddc1aee8106c59875d2686fe83d602cd0e07611
+R dcd0777a578b9e7fcae4e40b79f9e2d6
+U drh
+Z 7fb5863e4e0e9a753db98e9b8a77917c
 # Remove this line to create a well-formed Fossil manifest.
index 9ba0e9a8d4f9c30bf1721ec31d81fb0ad3345059..d8e14ca9d7045e1935bbe0baa294bb98d365e484 100644 (file)
@@ -1 +1 @@
-749c537812b907164b7e7ad1fddc1aee8106c59875d2686fe83d602cd0e07611
+6ab6f622be3e1ad93166d139b5fccf9628c86d1c14c6dfb4464cb8cf52c94785