]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a crash that can follow an OOM when "all tables" are registered with a session...
authordan <dan@noemail.net>
Tue, 22 Mar 2011 16:54:12 +0000 (16:54 +0000)
committerdan <dan@noemail.net>
Tue, 22 Mar 2011 16:54:12 +0000 (16:54 +0000)
FossilOrigin-Name: 183c236e991faaabdc768e52e926c52cf4a7abc9

ext/session/sessionfault.test
ext/session/sqlite3session.c
manifest
manifest.uuid

index 7ba05bbb22a611b0c030437310edc47e1f8d2653..c8ce9e48afc5067884bd68b5a2598b4ba6dd9323 100644 (file)
@@ -34,7 +34,11 @@ db2 close
 #-------------------------------------------------------------------------
 # Test OOM error handling when collecting and applying a simple changeset.
 #
-do_faultsim_test pagerfault-1 -faults oom-* -prep {
+# Test 1.1 attaches tables individually by name to the session object. 
+# Whereas test 1.2 passes NULL to sqlite3session_attach() to attach all
+# tables.
+#
+do_faultsim_test pagerfault-1.1 -faults oom-* -prep {
   catch {db2 close}
   catch {db close}
   faultsim_restore_and_reopen
@@ -51,6 +55,32 @@ do_faultsim_test pagerfault-1 -faults oom-* -prep {
   if {$testrc==0} { compare_db db db2 }
 }
 
+do_faultsim_test pagerfault-1.2 -faults oom-* -prep {
+  catch {db2 close}
+  catch {db close}
+  faultsim_restore_and_reopen
+} -body {
+  sqlite3session S db main
+  S attach *
+  execsql {
+    INSERT INTO t1 VALUES(7, 8, 9);
+    UPDATE t1 SET c = 10 WHERE a = 1;
+    DELETE FROM t1 WHERE a = 4;
+  }
+  set ::changeset [S changeset]
+  set {} {}
+} -test {
+  catch { S delete }
+  faultsim_test_result {0 {}} {1 SQLITE_NOMEM}
+  faultsim_integrity_check
+  if {$testrc==0} { 
+    proc xConflict {args} { return "OMIT" }
+    sqlite3 db2 test.db2
+    sqlite3changeset_apply db2 $::changeset xConflict
+    compare_db db db2 
+  }
+}
+
 #-------------------------------------------------------------------------
 # The following block of tests - pagerfault-2.* - are designed to check 
 # the handling of faults in the sqlite3changeset_apply() function.
index 2b0e3ac6bb2b6e2af21ff86e39d98da4467979b9..3619e7c4b6ce94e9b6cff5af0f8ce8f6edb7a78f 100644 (file)
@@ -781,7 +781,7 @@ static void xPreUpdate(
         /* This branch is taken if table zName has not yet been attached to
         ** this session and the auto-attach flag is set.  */
         pSession->rc = sqlite3session_attach(pSession,zName);
-        if( pSession->rc ) continue;
+        if( pSession->rc ) break;
         pTab = pSession->pTable;
         assert( 0==sqlite3_strnicmp(pTab->zName, zName, nName+1) );
       }
index 1573c82507f1d8c2657b08925860ac68286d7049..8c992e020b7dc3ec89b290c5ce619e71a2dc49ad 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C If\sa\sNULL\spointer\sis\spassed\sto\ssqlite3session_attach()\sin\splace\sof\sa\stable\sname,\sattach\sall\sdatabase\stables\sto\sthe\ssession\sobject.
-D 2011-03-22T15:21:04
+C Fix\sa\scrash\sthat\scan\sfollow\san\sOOM\swhen\s"all\stables"\sare\sregistered\swith\sa\ssession\smodule.
+D 2011-03-22T16:54:12
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 27701a1653595a1f2187dc61c8117e00a6c1d50f
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -102,8 +102,8 @@ F ext/rtree/viewrtree.tcl eea6224b3553599ae665b239bd827e182b466024
 F ext/session/session1.test 1e8cda2cc8a60171dabc0fbec4124f9f7c943f23
 F ext/session/session2.test f993ee243db15025a7d9b1dae903fe3f82f04229
 F ext/session/session_common.tcl fb91560b6dbd086010df8b3a137a452f1ac21a28
-F ext/session/sessionfault.test 2dcf303379d0c01d8320f3c7d0452e6a0dcebd48
-F ext/session/sqlite3session.c c2cc2149e682af9d2ddaab09152ef578c8f97864
+F ext/session/sessionfault.test 495f87fb9bd764ae90d4b40d0c33a76d86d9063e
+F ext/session/sqlite3session.c ec0f440ae73229ae8ae307a31e631b9d71991cd4
 F ext/session/sqlite3session.h 5055e21ca0cb6ddacd46b773a15d90bc0298b0a2
 F ext/session/test_session.c d31fbf5902d0cff5e5495a5ce62efda77b596f2b
 F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895
@@ -923,7 +923,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P 06048a68b351e3eb15a890cb54db8a1d4b345fbc
-R aba670c08b10d639853d25c358b85571
+P e9037e4e4ccaa5c633759c4d041b60b631b92c6c
+R 93198cfc6613c93be1aa416f0de3d035
 U dan
-Z 48e2e8d1a1883a86d400f9c1e1c32110
+Z ee6ba5845d31702e943c5fa7b7c9db34
index f56d01fe0f7a3ac94e7df97cc4249fe22084b8b7..406e8e890259c0f82c34c14b1647dcb753056824 100644 (file)
@@ -1 +1 @@
-e9037e4e4ccaa5c633759c4d041b60b631b92c6c
\ No newline at end of file
+183c236e991faaabdc768e52e926c52cf4a7abc9
\ No newline at end of file