]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Correctly allocate new columns array in ALTER TABLE .. ADD COLUMN. Ticket #1183....
authordanielk1977 <danielk1977@noemail.net>
Sun, 27 Mar 2005 01:56:30 +0000 (01:56 +0000)
committerdanielk1977 <danielk1977@noemail.net>
Sun, 27 Mar 2005 01:56:30 +0000 (01:56 +0000)
FossilOrigin-Name: 3c86e63389b286a49106d8d7009cc63e3914d40f

manifest
manifest.uuid
src/alter.c
test/alter3.test

index 5a85388acd19c189fd05797dc1812113b51293a3..bb0c9eaf0dcb7ef5fc653dfcf2e4d88887e4bf97 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sa\stypo\sin\svdbeInt.h.\s\sThis\swas\spotentially\sa\sserious\smistake,\sbut\swe\sgot\nlucky\sand\sit\sis\sbenign.\s(CVS\s2418)
-D 2005-03-23T01:48:48
+C Correctly\sallocate\snew\scolumns\sarray\sin\sALTER\sTABLE\s..\sADD\sCOLUMN.\sTicket\s#1183.\s(CVS\s2419)
+D 2005-03-27T01:56:31
 F Makefile.in 5c00d0037104de2a50ac7647a5f12769795957a3
 F Makefile.linux-gcc 06be33b2a9ad4f005a5f42b22c4a19dab3cbb5c7
 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -27,7 +27,7 @@ F sqlite.pc.in 30552343140c53304c2a658c080fbe810cd09ca2
 F sqlite3.1 6be1ad09113570e1fc8dcaff84c9b0b337db5ffc
 F sqlite3.def dbaeb20c153e1d366e8f421b55a573f5dfc00863
 F sqlite3.pc.in 985b9bf34192a549d7d370e0f0b6b34a4f61369a
-F src/alter.c 8ee27ba2d09f26030c145a780ec8a93cd876d315
+F src/alter.c f0b637b850dce24997105b526e9c68720e6711fb
 F src/attach.c 3615dbe960cbee4aa5ea300b8a213dad36527b0f
 F src/auth.c 18c5a0befe20f3a58a41e3ddd78f372faeeefe1f
 F src/btree.c c33c0e6833eb8ac0f0941c1f8e722f7c70dbef57
@@ -86,7 +86,7 @@ F tclinstaller.tcl 046e3624671962dc50f0481d7c25b38ef803eb42
 F test/all.test 7f0988442ab811dfa41793b5b550f5828ce316f3
 F test/alter.test 3a20ce14c3989f7e2e75da50797065c2e56f838b
 F test/alter2.test 60ba0a7057dc71ad630a1cc7c487104346849d50
-F test/alter3.test 244f86314558a56a3e79c17eee6fb497fa60645b
+F test/alter3.test db854cd5565a007336fbcd901c73e48c6d95bb06
 F test/attach.test e6bda19cc954fd84836fadbd70d80134cb17918a
 F test/attach2.test 6f3a3a3a7f5be40388dd4d805e0e0712718dca9d
 F test/attach3.test c05c70b933afbde0901dab9da3e66ee842c09f38
@@ -278,7 +278,7 @@ F www/tclsqlite.tcl e73f8f8e5f20e8277619433f7970060ab01088fc
 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
 F www/version3.tcl 092a01f5ef430d2c4acc0ae558d74c4bb89638a0
 F www/whentouse.tcl 528299b8316726dbcc5548e9aa0648c8b1bd055b
-P 35ace66f3ebefd4cd1455c923199511ab3b72bb6
-R 4ba6e353433ed3b9a4de1ad1305ee81e
-U drh
-Z baa3cf4075d33884f3f8891f31513410
+P f0d64dc8aa65b25af551e6e5f07746bd77c8112a
+R 93fef3478cb27e538ca03d0eaca7e793
+U danielk1977
+Z 9d9c3def40d044e2fb4f7873a3f87cc5
index 13fece4d4003840bdc54dcc152dd7b8825df03f9..46d740c0ef62dfaf92df9e11bf2c5ab24cb0d0ef 100644 (file)
@@ -1 +1 @@
-f0d64dc8aa65b25af551e6e5f07746bd77c8112a
\ No newline at end of file
+3c86e63389b286a49106d8d7009cc63e3914d40f
\ No newline at end of file
index 58784622bff2bd534030d2415f8819e5867d1d12..e69fdc97ed6969b5131f9db8bb222ae37d1d9b49 100644 (file)
@@ -12,7 +12,7 @@
 ** This file contains C code routines that used to generate VDBE code
 ** that implements the ALTER TABLE command.
 **
-** $Id: alter.c,v 1.4 2005/03/19 14:45:49 drh Exp $
+** $Id: alter.c,v 1.5 2005/03/27 01:56:31 danielk1977 Exp $
 */
 #include "sqliteInt.h"
 #include <ctype.h>
@@ -521,7 +521,9 @@ void sqlite3AlterBeginAddColumn(Parse *pParse, SrcList *pSrc){
   if( !pNew ) goto exit_begin_add_column;
   pParse->pNewTable = pNew;
   pNew->nCol = pTab->nCol;
-  nAlloc = ((pNew->nCol)/8)+8;
+  assert( pNew->nCol>0 );
+  nAlloc = (((pNew->nCol-1)/8)*8)+8;
+  assert( nAlloc>=pNew->nCol && nAlloc%8==0 && nAlloc-pNew->nCol<8 );
   pNew->aCol = (Column *)sqliteMalloc(sizeof(Column)*nAlloc);
   pNew->zName = sqliteStrDup(pTab->zName);
   if( !pNew->aCol || !pNew->zName ){
index ac44bed0df205c3671d4be8b5abf18d767d5f57a..8e56df400ed15790858ddce0d48993e188836fe8 100644 (file)
 # file format change that may be used in the future to implement
 # "ALTER TABLE ... ADD COLUMN".
 #
-# $Id: alter3.test,v 1.3 2005/03/17 12:33:14 drh Exp $
+# $Id: alter3.test,v 1.4 2005/03/27 01:56:31 danielk1977 Exp $
 #
 
 set testdir [file dirname $argv0]
 
+source $testdir/tester.tcl
+
 # If SQLITE_OMIT_ALTERTABLE is defined, omit this file.
 ifcapable !altertable {
   finish_test
   return
 }
 
-source $testdir/tester.tcl
-
 # Test Organisation:
 # ------------------
 #
@@ -336,4 +336,29 @@ ifcapable vacuum {
   } {1}
 }
 
+# Ticket #1183 - Make sure adding columns to large tables does not cause
+# memory corruption (as was the case before this bug was fixed).
+do_test alter3-8.1 {
+  execsql {
+    CREATE TABLE t4(c1);
+  }
+} {}
+do_test alter3-8.2 {
+  set cols c1
+  for {set i 2} {$i < 100} {incr i} {
+    execsql "
+      ALTER TABLE t4 ADD c$i
+    "
+    lappend cols c$i
+  }
+  set ::sql "CREATE TABLE t4([join $cols {, }])"
+  list 
+} {}
+do_test alter3-8.2 {
+  execsql {
+    SELECT sql FROM sqlite_master WHERE name = 't4';
+  }
+} [list $::sql]
+
 finish_test
+