Fix a segfault that can occur after a malloc failure in an ANALYZE statement. Ticket #2772. (CVS 4544)

FossilOrigin-Name: d05eb67dd6e171cfe8b9528aa3c7c953780d8c82
This commit is contained in:
danielk1977 2007-11-15 13:10:22 +00:00
parent d0e2a85436
commit b8b4bfa061
4 changed files with 25 additions and 14 deletions

View File

@ -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

View File

@ -1 +1 @@
d31f1e0d74a871d66cf7d3ef35faae5171d5cbc3
d05eb67dd6e171cfe8b9528aa3c7c953780d8c82

View File

@ -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{

View File

@ -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;