2010-10-01 17:07 UTC+0300 Mindaugas Kavaliauskas (dbtopas/at/dbtopas.lt)

* harbour/contrib/rddsdd/sqlbase.c
  * harbour/contrib/sddfb/sddfb.c
  * harbour/contrib/sddmy/sddmy.c
  * harbour/contrib/sddoci/sddoci.c
  * harbour/contrib/sddodbc/sddodbc.c
  * harbour/contrib/sddpg/sddpg.c
  * harbour/contrib/sddsqlt3/sddsqlt3.c
    ! added protection agains double resource freeing in case of double 
    CLOSE method;
This commit is contained in:
Mindaugas Kavaliauskas
2010-10-01 14:08:22 +00:00
parent ff5b0ff83b
commit 1d6ad2ddfa
9 changed files with 78 additions and 39 deletions

View File

@@ -16,6 +16,17 @@
The license applies to all entries newer than 2009-04-28.
*/
2010-10-01 17:07 UTC+0300 Mindaugas Kavaliauskas (dbtopas/at/dbtopas.lt)
* harbour/contrib/rddsdd/sqlbase.c
* harbour/contrib/sddfb/sddfb.c
* harbour/contrib/sddmy/sddmy.c
* harbour/contrib/sddoci/sddoci.c
* harbour/contrib/sddodbc/sddodbc.c
* harbour/contrib/sddpg/sddpg.c
* harbour/contrib/sddsqlt3/sddsqlt3.c
! added protection agains double resource freeing in case of double
CLOSE method;
2010-09-30 10:20 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)
+ contrib/hbqt/qtcore/qth/QGenericArgument.qth
+ contrib/hbqt/qtcore/qth/QGenericReturnArgument.qth

View File

@@ -1,12 +1,2 @@
'
' $Id$
'
' Copyright 2010 Viktor Szakats (harbour.01 syenar.hu)
' www - http://harbour-project.org
'
' See COPYING for licensing terms.
Dim tst2 : Set tst2 = WScript.CreateObject("MyOleTimeServer")
WScript.CreateObject("Wscript.Shell").Popup tst2.Time()

View File

@@ -625,6 +625,8 @@ static HB_ERRCODE sqlbaseClose( SQLBASEAREAP pArea )
}
hb_xfree( pArea->pRow );
hb_xfree( pArea->pRowFlags );
pArea->pRow = NULL;
pArea->pRowFlags = NULL;
}
if ( pArea->szQuery )
@@ -636,6 +638,7 @@ static HB_ERRCODE sqlbaseClose( SQLBASEAREAP pArea )
{
/* It is possible to have areas without connection and SDD driver. Ex., arrayrdd. [Mindaugas] */
pArea->pConnection->uiAreaCount--;
pArea->pConnection = NULL;
}
return HB_SUCCESS;
}

View File

@@ -434,19 +434,23 @@ static HB_ERRCODE fbClose( SQLBASEAREAP pArea )
SDDDATA * pSDDData = ( SDDDATA * ) pArea->pSDDData;
ISC_STATUS_ARRAY status;
if ( pSDDData->pSqlda )
if( pSDDData )
{
hb_xfree( pSDDData->pSqlda );
if ( pSDDData->pSqlda )
{
hb_xfree( pSDDData->pSqlda );
}
if ( pSDDData->hStmt )
{
isc_dsql_free_statement( status, &pSDDData->hStmt, DSQL_drop );
}
if ( pSDDData->hTrans )
{
isc_rollback_transaction( status, &pSDDData->hTrans );
}
hb_xfree( pSDDData );
pArea->pSDDData = NULL;
}
if ( pSDDData->hStmt )
{
isc_dsql_free_statement( status, &pSDDData->hStmt, DSQL_drop );
}
if ( pSDDData->hTrans )
{
isc_rollback_transaction( status, &pSDDData->hTrans );
}
hb_xfree( pSDDData );
return HB_SUCCESS;
}

View File

@@ -443,11 +443,14 @@ static HB_ERRCODE mysqlClose( SQLBASEAREAP pArea )
{
SDDDATA * pSDDData = ( SDDDATA * ) pArea->pSDDData;
if( pSDDData->pResult )
if( pSDDData )
{
mysql_free_result( pSDDData->pResult );
if( pSDDData->pResult )
mysql_free_result( pSDDData->pResult );
hb_xfree( pSDDData );
pArea->pSDDData = NULL;
}
hb_xfree( pSDDData );
return HB_SUCCESS;
}

View File

@@ -513,11 +513,14 @@ static HB_ERRCODE ocilibClose( SQLBASEAREAP pArea )
{
SDDDATA * pSDDData = ( SDDDATA * ) pArea->pSDDData;
if( pSDDData->pStmt )
if( pSDDData )
{
OCI_StatementFree( pSDDData->pStmt );
if( pSDDData->pStmt )
OCI_StatementFree( pSDDData->pStmt );
hb_xfree( pSDDData );
pArea->pSDDData = NULL;
}
hb_xfree( pSDDData );
return HB_SUCCESS;
}

View File

@@ -581,11 +581,14 @@ static HB_ERRCODE odbcClose( SQLBASEAREAP pArea )
{
SDDDATA * pSDDData = ( SDDDATA * ) pArea->pSDDData;
if ( pSDDData->hStmt )
if( pSDDData )
{
SQLFreeHandle( SQL_HANDLE_STMT, pSDDData->hStmt );
if( pSDDData->hStmt )
SQLFreeHandle( SQL_HANDLE_STMT, pSDDData->hStmt );
hb_xfree( pSDDData );
pArea->pSDDData = NULL;
}
hb_xfree( pSDDData );
return HB_SUCCESS;
}

View File

@@ -68,6 +68,7 @@
#define BOOLOID 16
#define BYTEAOID 17
#define CHAROID 18
#define NAMEOID 19
#define INT8OID 20
#define INT2OID 21
#define INT4OID 23
@@ -292,13 +293,13 @@ static HB_ERRCODE pgsqlOpen( SQLBASEAREAP pArea )
case BPCHAROID:
case VARCHAROID:
pFieldInfo.uiType = HB_FT_STRING;
pFieldInfo.uiLen = ( HB_USHORT ) PQfsize( pResult, uiCount ) - 4;
pFieldInfo.uiLen = ( HB_USHORT ) PQfmod( pResult, uiCount ) - 4;
break;
case NUMERICOID:
pFieldInfo.uiType = HB_FT_DOUBLE;
pFieldInfo.uiLen = ( ( PQfsize( pResult, uiCount ) - 4 ) >> 16 ) & 0xFFFF;
pFieldInfo.uiDec = ( PQfsize( pResult, uiCount ) - 4 ) & 0xFFFF;
pFieldInfo.uiLen = ( PQfmod( pResult, uiCount ) - 4 ) >> 16;
pFieldInfo.uiDec = ( PQfmod( pResult, uiCount ) - 4 ) & 0xFFFF;
break;
case INT2OID:
@@ -375,6 +376,11 @@ static HB_ERRCODE pgsqlOpen( SQLBASEAREAP pArea )
pFieldInfo.uiLen = 26;
break;
case NAMEOID:
pFieldInfo.uiType = HB_FT_STRING;
pFieldInfo.uiLen = 63;
break;
case BYTEAOID:
pFieldInfo.uiType = HB_FT_STRING;
pFieldInfo.uiLen = 0;
@@ -404,6 +410,10 @@ static HB_ERRCODE pgsqlOpen( SQLBASEAREAP pArea )
hb_xfree( pStr );
break;
}
case HB_FT_MEMO:
hb_itemPutC( pItem, NULL );
hb_itemSetCMemo( pItem );
break;
case HB_FT_INTEGER:
pItem = hb_itemPutNI( NULL, 0 );
@@ -475,11 +485,14 @@ static HB_ERRCODE pgsqlClose( SQLBASEAREAP pArea )
{
SDDDATA * pSDDData = ( SDDDATA * ) pArea->pSDDData;
if ( pSDDData->pResult )
if( pSDDData )
{
PQclear( pSDDData->pResult );
if ( pSDDData->pResult )
PQclear( pSDDData->pResult );
hb_xfree( pSDDData );
pArea->pSDDData = NULL;
}
hb_xfree( pSDDData );
return HB_SUCCESS;
}
@@ -511,6 +524,11 @@ static HB_ERRCODE pgsqlGetValue( SQLBASEAREAP pArea, HB_USHORT uiIndex, PHB_ITEM
hb_itemPutCL( pItem, pValue, ulLen );
break;
case HB_FT_MEMO:
hb_itemPutCL( pItem, pValue, ulLen );
hb_itemSetCMemo( pItem );
break;
case HB_FT_INTEGER:
case HB_FT_LONG:
case HB_FT_DOUBLE:

View File

@@ -412,10 +412,14 @@ static HB_ERRCODE sqlite3Close( SQLBASEAREAP pArea )
{
SDDDATA * pSDDData = ( SDDDATA * ) pArea->pSDDData;
if( pSDDData->pStmt )
sqlite3_finalize( pSDDData->pStmt );
if( pSDDData )
{
if( pSDDData->pStmt )
sqlite3_finalize( pSDDData->pStmt );
hb_xfree( pSDDData );
hb_xfree( pSDDData );
pArea->pSDDData = NULL;
}
return HB_SUCCESS;
}