]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a Pager ref-count leak in the sqlite_dbpage virtual table.
authordrh <drh@noemail.net>
Fri, 27 Oct 2017 18:24:11 +0000 (18:24 +0000)
committerdrh <drh@noemail.net>
Fri, 27 Oct 2017 18:24:11 +0000 (18:24 +0000)
FossilOrigin-Name: c063bb04da77d6847e4e254b6bb939c860e781382e34ddff8e0454d9db7552e2

manifest
manifest.uuid
src/dbpage.c
test/dbpage.test

index 2d13f91b8db006694b13ac976d6182cf0cf2f60c..7abf007c96dbcab8ad073c1e48dc8a1cefe46fc7 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Handle\sthe\sCtrl-C\sevent\sfor\sthe\sshell\son\sWin32.
-D 2017-10-27T17:09:44.546
+C Fix\sa\sPager\sref-count\sleak\sin\sthe\ssqlite_dbpage\svirtual\stable.
+D 2017-10-27T18:24:11.866
 F Makefile.in e016061b23e60ac9ec27c65cb577292b6bde0307ca55abd874ab3487b3b1beb2
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 37740aba9c4bb359c627eadccf1cfd7be4f5f847078723777ea7763969e533b1
@@ -413,7 +413,7 @@ F src/callback.c 28a8ede982fde4129b828350f78f2c01fe7d12c74d1a0a05d7108ab36f30868
 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
 F src/ctime.c ff1be3eed7bdd75aaca61ca8dc848f7c9f850ef2fb9cb56f2734e922a098f9c0
 F src/date.c 48f743d88bbe88f848532d333cca84f26e52a4f217e86f86be7fc1b919c33d74
-F src/dbpage.c 196a072dffda3ad50bb078da86bb39f1d07cabe4f88e2b12482f4f5ffce73352
+F src/dbpage.c 003755140e21b917c0a39e70907c1e4612b25d1e24b9a3c64b0d638c8ecb5dc2
 F src/dbstat.c 7a4ba8518b6369ef3600c49cf9c918ad979acba610b2aebef1b656d649b96720
 F src/delete.c 21a5f1812fdb599e9f7afb9f650bdabab60a3afd51d7e94e539c982f647b0023
 F src/expr.c 755caeafc43e3cd31e1d810795712641f6e19f7e7e9575faece4c77381fd8304
@@ -715,7 +715,7 @@ F test/cursorhint2.test 8457e93d97f665f23f97cdbc8477d16e3480331b
 F test/date.test 9b73bbeb1b82d9c1f44dec5cf563bf7da58d2373
 F test/date2.test 74c234bece1b016e94dd4ef9c8cc7a199a8806c0e2291cab7ba64bace6350b10
 F test/dbfuzz.c 73047c920d6210e5912c87cdffd9a1c281d4252e
-F test/dbpage.test ace7a8d2d66b0ad043dacc61d206991184c9916de6862bf4ff165a7906a624af
+F test/dbpage.test dbf50a4d361f9e45a979432c727506065113124478a7d2db12074fa655e65d6c
 F test/dbstatus.test 73149851b3aff14fc6db478e58f9083a66422cf5
 F test/dbstatus2.test e93ab03bfae6d62d4d935f20de928c19ca0ed0ab
 F test/default.test 0cb49b1c315a0d81c81d775e407f66906a2a604d
@@ -1666,7 +1666,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 8d3cc928a8f0c7b2616c5c75af9d3a50bd4f0fe8e4ccab545ab8648cbfbb4b7f
-R b04098ed5c4b7451669ce8c4fddf24e2
-U mistachkin
-Z 04b0a33e7f8b0430861d645ce26e5f19
+P c8aaf37117ed4a23bbd15dc481788735efcb77bff98be423eca3521c0a9270de
+R f85ba3328211fce31f6fd8c8e66f1d27
+U drh
+Z a44af1749e0d20716f81debef1ff6db8
index 478c761165084ca754ef536ae5e5a5b0724efbbe..f8e9e5b80ae5f149068530dea0fef1f120798645 100644 (file)
@@ -1 +1 @@
-c8aaf37117ed4a23bbd15dc481788735efcb77bff98be423eca3521c0a9270de
\ No newline at end of file
+c063bb04da77d6847e4e254b6bb939c860e781382e34ddff8e0454d9db7552e2
\ No newline at end of file
index 54fb5beaa76d5ebdff7e8cd8fa9b379d3984825c..f287e72229d2334390595e990b926335a68eeba2 100644 (file)
@@ -220,7 +220,7 @@ static int dbpageFilter(
 ){
   DbpageCursor *pCsr = (DbpageCursor *)pCursor;
   DbpageTable *pTab = (DbpageTable *)pCursor->pVtab;
-  int rc = SQLITE_OK;
+  int rc;
   sqlite3 *db = pTab->db;
   Btree *pBt;
 
@@ -254,6 +254,7 @@ static int dbpageFilter(
   }else{
     assert( pCsr->pgno==1 );
   }
+  if( pCsr->pPage1 ) sqlite3PagerUnrefPageOne(pCsr->pPage1);
   rc = sqlite3PagerGet(pCsr->pPager, 1, &pCsr->pPage1, 0);
   return rc;
 }
index 5a68d3cabaa8af795735364d70f7f72e1fa5fe7a..754bc1792645e081b5cfc9b4cf5490aac3ff1b7d 100644 (file)
@@ -56,6 +56,14 @@ do_execsql_test 160 {
   INSERT INTO t2 VALUES(11,12,13);
   SELECT pgno, quote(substr(data,1,5)) FROM sqlite_dbpage('aux1');
 } {1 X'53514C6974' 2 X'0D00000001'}
+do_execsql_test 170 {
+  CREATE TABLE aux1.x3(x,y,z);
+  INSERT INTO x3(x,y,z) VALUES(1,'main',1),(2,'aux1',1);
+  SELECT pgno, schema, substr(data,1,6)
+    FROM sqlite_dbpage, x3
+   WHERE sqlite_dbpage.schema=x3.y AND sqlite_dbpage.pgno=x3.z
+   ORDER BY x3.x;
+} {1 main SQLite 1 aux1 SQLite}
 
 do_execsql_test 200 {
   CREATE TEMP TABLE saved_content(x);