Fix a memory leak that occurs as a result of an IO error. (CVS 2224)

FossilOrigin-Name: 1edfdcbf142b380172a26d094e6e4a3900db8463
This commit is contained in:
danielk1977 2005-01-17 03:40:08 +00:00
parent fdb7cdb4b1
commit 3c9cc8d095
3 changed files with 13 additions and 14 deletions

View File

@ -1,5 +1,5 @@
C Change\ssome\sassert()s\sthat\scould\sfail\sif\sthe\sdatabase\sis\scorrupt\sto\sreturn\sSQLITE_CORRUPT\sinstead.\s(CVS\s2223)
D 2005-01-17T02:12:19
C Fix\sa\smemory\sleak\sthat\soccurs\sas\sa\sresult\sof\san\sIO\serror.\s(CVS\s2224)
D 2005-01-17T03:40:08
F Makefile.in 78d6d0af3725aef32468ac9923444d7645d21a28
F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457
F README a01693e454a00cc117967e3f9fdab2d4d52e9bc1
@ -74,7 +74,7 @@ F src/update.c 0979397c41ac29c54fe0cc687a356d8629a633af
F src/utf.c 9bece2c7b94d9002ab1bb900a7658c6f826b0f74
F src/util.c 03ba0b0b83b14a2ddbc0aaac0681c92c8ebb0b0c
F src/vacuum.c 1a9db113a027461daaf44724c71dd1ebbd064203
F src/vdbe.c a89bb4eefa60226ddfdf8e708ea9352c0a124da3
F src/vdbe.c c5a711f146415634b72b05212bab9f222b0cce26
F src/vdbe.h 067ca8d6750ba4f69a50284765e5883dee860181
F src/vdbeInt.h f2b5f54d9881bbc89fff02d95f3f825ade68bce2
F src/vdbeapi.c 0cf3bdc1072616bedc8eec7fc22e3f5a169d33fd
@ -267,7 +267,7 @@ F www/tclsqlite.tcl e73f8f8e5f20e8277619433f7970060ab01088fc
F www/vdbe.tcl 095f106d93875c94b47367384ebc870517431618
F www/version3.tcl 092a01f5ef430d2c4acc0ae558d74c4bb89638a0
F www/whentouse.tcl c3b50d3ac31c54be2a1af9b488a89d22f1e6e746
P feb49d10e83ecc186024d4e96b64ef92cf876715
R 690aa08ec808e0b8c04e201d95e5a003
P 2d58c0afa769d49c8819ea4982bc20ae39516f97
R 5225b78fe98ecaba4ad353b32e187f8c
U danielk1977
Z 422777f924a69fbf76ec890646525100
Z fe4ca27f9035b326974cf8c4ecac5357

View File

@ -1 +1 @@
2d58c0afa769d49c8819ea4982bc20ae39516f97
1edfdcbf142b380172a26d094e6e4a3900db8463

View File

@ -43,7 +43,7 @@
** in this file for details. If in doubt, do not deviate from existing
** commenting and indentation practices when changing or adding code.
**
** $Id: vdbe.c,v 1.442 2005/01/12 09:10:40 danielk1977 Exp $
** $Id: vdbe.c,v 1.443 2005/01/17 03:40:08 danielk1977 Exp $
*/
#include "sqliteInt.h"
#include "os.h"
@ -1825,7 +1825,7 @@ case OP_Column: {
if( !zRec && avail<szHdr ){
rc = sqlite3VdbeMemFromBtree(pCrsr, 0, szHdr, pC->keyAsData, &sMem);
if( rc!=SQLITE_OK ){
goto abort_due_to_error;
goto op_column_out;
}
zData = sMem.z;
}
@ -1851,10 +1851,8 @@ case OP_Column: {
** we are dealing with a malformed record.
*/
if( idx!=szHdr || offset!=payloadSize ){
sqliteFree(aType);
if( pC ) pC->aType = 0;
rc = SQLITE_CORRUPT;
break;
goto op_column_out;
}
/* Remember all aType and aColumn information if we have a cursor
@ -1876,7 +1874,7 @@ case OP_Column: {
len = sqlite3VdbeSerialTypeLen(aType[p2]);
rc = sqlite3VdbeMemFromBtree(pCrsr, aOffset[p2], len, pC->keyAsData, &sMem);
if( rc!=SQLITE_OK ){
goto abort_due_to_error;
goto op_column_out;
}
zData = sMem.z;
}
@ -1901,8 +1899,9 @@ case OP_Column: {
** can abandon sMem */
rc = sqlite3VdbeMemMakeWriteable(pTos);
op_column_out:
/* Release the aType[] memory if we are not dealing with cursor */
if( !pC ){
if( !pC || !pC->aType ){
sqliteFree(aType);
}
break;