]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Harden sqlite3session_delete() against trying to delete a session that
authordrh <drh@noemail.net>
Sat, 13 Feb 2016 14:45:56 +0000 (14:45 +0000)
committerdrh <drh@noemail.net>
Sat, 13 Feb 2016 14:45:56 +0000 (14:45 +0000)
is not currently on the session list.

FossilOrigin-Name: 6c2d34df76fb7823f307c11a1135ab30674421a9

ext/session/sqlite3session.c
manifest
manifest.uuid

index 546a22a072346fd05ffbc44856c88715b2164a29..312e03dcfbf1f45904cf6e1a4860e05ee7e2cfdd 100644 (file)
@@ -1615,9 +1615,13 @@ void sqlite3session_delete(sqlite3_session *pSession){
   ** database handle. Hold the db mutex while doing so.  */
   sqlite3_mutex_enter(sqlite3_db_mutex(db));
   pHead = (sqlite3_session*)sqlite3_preupdate_hook(db, 0, 0);
-  for(pp=&pHead; (*pp)!=pSession; pp=&((*pp)->pNext));
-  *pp = (*pp)->pNext;
-  if( pHead ) sqlite3_preupdate_hook(db, xPreUpdate, (void *)pHead);
+  for(pp=&pHead; ALWAYS((*pp)!=0); pp=&((*pp)->pNext)){
+    if( (*pp)==pSession ){
+      *pp = (*pp)->pNext;
+      if( pHead ) sqlite3_preupdate_hook(db, xPreUpdate, (void*)pHead);
+      break;
+    }
+  }
   sqlite3_mutex_leave(sqlite3_db_mutex(db));
 
   /* Delete all attached table objects. And the contents of their 
index 4fc05623b8b297a7460ab710b6b8f42a89907484..27189df562ddb58d7830189e68134bbaef3d9874 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sa\sproblem\sin\ssessionfault.test\scausing\sit\sto\ssegfault\sfollowing\sa\stest\sfailure.\sThis\scommit\sdoes\snot\sfix\sthe\sactual\stest\sfailure\s-\sjust\sthe\ssubsequent\ssegfault.
-D 2016-02-13T14:39:46.492
+C Harden\ssqlite3session_delete()\sagainst\strying\sto\sdelete\sa\ssession\sthat\nis\snot\scurrently\son\sthe\ssession\slist.
+D 2016-02-13T14:45:56.852
 F Makefile.in 5cbf3f753328d1bcd3a6117785b4874d99612f8f
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 45e596bd4ccecf2256f68a2e96466aa52cc4bc1f
@@ -283,7 +283,7 @@ F ext/session/sessionE.test e60a238c47f0feb3bb707e7f35e22be09c7e8f26
 F ext/session/sessionF.test c2f178d4dfd723a5fd94a730ea2ccb44c669e3ce
 F ext/session/session_common.tcl a1293167d14774b5e728836720497f40fe4ea596
 F ext/session/sessionfault.test 94a4dd100e16cf0b1c44d8487517dbb407eeab1d
-F ext/session/sqlite3session.c 1ace1d1e4cb32cf60ca6e8ed1ae8d4c9f99ca458
+F ext/session/sqlite3session.c b10af3e87ae437bb197b3a23a584d2dc8ad8981a
 F ext/session/sqlite3session.h 64e9e7f185725ef43b97f4a9a0c0df0669844f1d
 F ext/session/test_session.c 187bd344c5ae9d5be85e22ef7c3010f0c17307ce
 F ext/userauth/sqlite3userauth.h 19cb6f0e31316d0ee4afdfb7a85ef9da3333a220
@@ -1448,7 +1448,7 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh ef6ebc6fd8d2dc35db3b622015c16a023d4fef4f
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 4d7a802e73ef0352f840bc8d74c560afb7666ff7
-R 56ec775a8f26a6fc9784a8bb5f2be4e3
-U dan
-Z 3166b3068d23321aad4e67ff074e960a
+P 582b2ae77d65b1e142ceb5774f37b0aaa3851378
+R 99d33fcea6ce08ff5ef828796adb3d5d
+U drh
+Z 9efd5fb5a4c4d606f6b8046dd50f3f7a
index c918008c70ab63da0dd26ff0f044bcbefdbb0d65..d7c3afaaf61f4a2abce6e9a4ff47c2926faef05c 100644 (file)
@@ -1 +1 @@
-582b2ae77d65b1e142ceb5774f37b0aaa3851378
\ No newline at end of file
+6c2d34df76fb7823f307c11a1135ab30674421a9
\ No newline at end of file