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:
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user