From b8b4bfa06192d68741afdfb80818b3fd1deaa1e5 Mon Sep 17 00:00:00 2001 From: danielk1977 Date: Thu, 15 Nov 2007 13:10:22 +0000 Subject: [PATCH] Fix a segfault that can occur after a malloc failure in an ANALYZE statement. Ticket #2772. (CVS 4544) FossilOrigin-Name: d05eb67dd6e171cfe8b9528aa3c7c953780d8c82 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/analyze.c | 12 +++++++----- test/mallocA.test | 11 ++++++++++- 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/manifest b/manifest index a60caff92a..be2daf1536 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\san\sexperimental\sAPI\sfor\sretrieving\sthe\sSQL\ssource\sfrom\sa\scompiled\sstatement:\ssqlite3_sql().\sTicket\s#2769.\s(CVS\s4543) -D 2007-11-14T06:48:48 +C Fix\sa\ssegfault\sthat\scan\soccur\safter\sa\smalloc\sfailure\sin\san\sANALYZE\sstatement.\sTicket\s#2772.\s(CVS\s4544) +D 2007-11-15T13:10:23 F Makefile.arm-wince-mingw32ce-gcc ac5f7b2cef0cd850d6f755ba6ee4ab961b1fadf7 F Makefile.in 30c7e3ba426ddb253b8ef037d1873425da6009a8 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -78,7 +78,7 @@ F sqlite3.1 6be1ad09113570e1fc8dcaff84c9b0b337db5ffc F sqlite3.def a96c1d0d39362b763d2ddba220a32da41a15c4b4 F sqlite3.pc.in 985b9bf34192a549d7d370e0f0b6b34a4f61369a F src/alter.c 8512ed319aa5f7b9bbbd4e17953809e3ff398fdd -F src/analyze.c 49b4bd45eb286d833793ed6bf72355a5c1974865 +F src/analyze.c fd1a3d756c1a20fca3c505bed0398f4cdca83cb8 F src/attach.c a01d55157d46a1234909f3a7f21fb09549c947bd F src/auth.c c8b2ab5c8bad4bd90ed7c294694f48269162c627 F src/btmutex.c 442be6f068d77ca9ffd69899cf0a3943c244548c @@ -362,7 +362,7 @@ F test/malloc6.test d05fd71ef3c5983d10e0a6d728ea4a502a45a9e4 F test/malloc7.test 0d71bb6520b99934b551fa36a9c591404aeaad61 F test/malloc8.test addc27d907fec1af429551b95c72caa47fce2974 F test/malloc9.test 95d7069ad4fa262bf33bc4c5ca0a46f2bb2391cb -F test/mallocA.test f474c5bdbef4070e11c89d01ba1b0e78f955b97a +F test/mallocA.test 5ee8d42ff90e5b1aeee6fb645e73ffcb35bffd21 F test/mallocB.test 83bdbea443cc81758a57b0287807b0941218819a F test/mallocC.test 6f02fa2b4baa943bc6d6db323d5d07067967e728 F test/mallocD.test d638fb8f214b47fd31edfae8af738b92bd943dc0 @@ -587,7 +587,7 @@ F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5 -P 7bb00c7df672cb8988121f30e3bbdea9ad951603 -R 5c4df6521dfe4d4463c8657cb223a380 +P d31f1e0d74a871d66cf7d3ef35faae5171d5cbc3 +R 0bf5660b4afc6cfd49b0db1c5f6e2c5f U danielk1977 -Z d57498e72dddc8893fb5fcae7c38aca8 +Z 7a2e3189eb57bd7c9ad5d20204c8b8f2 diff --git a/manifest.uuid b/manifest.uuid index e7299ddb95..d7c842e827 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d31f1e0d74a871d66cf7d3ef35faae5171d5cbc3 \ No newline at end of file +d05eb67dd6e171cfe8b9528aa3c7c953780d8c82 \ No newline at end of file diff --git a/src/analyze.c b/src/analyze.c index 119e7f6484..a0d94683a9 100644 --- a/src/analyze.c +++ b/src/analyze.c @@ -11,7 +11,7 @@ ************************************************************************* ** This file contains code associated with the ANALYZE command. ** -** @(#) $Id: analyze.c,v 1.23 2007/08/29 17:43:20 drh Exp $ +** @(#) $Id: analyze.c,v 1.24 2007/11/15 13:10:23 danielk1977 Exp $ */ #ifndef SQLITE_OMIT_ANALYZE #include "sqliteInt.h" @@ -309,10 +309,12 @@ void sqlite3Analyze(Parse *pParse, Token *pName1, Token *pName2){ analyzeDatabase(pParse, iDb); }else{ z = sqlite3NameFromToken(db, pName1); - pTab = sqlite3LocateTable(pParse, z, 0); - sqlite3_free(z); - if( pTab ){ - analyzeTable(pParse, pTab); + if( z ){ + pTab = sqlite3LocateTable(pParse, z, 0); + sqlite3_free(z); + if( pTab ){ + analyzeTable(pParse, pTab); + } } } }else{ diff --git a/test/mallocA.test b/test/mallocA.test index 8c7705f95e..4751ff4906 100644 --- a/test/mallocA.test +++ b/test/mallocA.test @@ -10,7 +10,7 @@ #*********************************************************************** # This file contains additional out-of-memory checks (see malloc.tcl). # -# $Id: mallocA.test,v 1.6 2007/09/12 17:01:45 danielk1977 Exp $ +# $Id: mallocA.test,v 1.7 2007/11/15 13:10:23 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -44,6 +44,15 @@ file copy test.db test.db.bu do_malloc_test mallocA-1 -testdb test.db.bu -sqlbody { ANALYZE } +do_malloc_test mallocA-1.1 -testdb test.db.bu -sqlbody { + ANALYZE t1 +} +do_malloc_test mallocA-1.2 -testdb test.db.bu -sqlbody { + ANALYZE main +} +do_malloc_test mallocA-1.3 -testdb test.db.bu -sqlbody { + ANALYZE main.t1 +} ifcapable reindex { do_malloc_test mallocA-2 -testdb test.db.bu -sqlbody { REINDEX;