diff --git a/harbour/ChangeLog b/harbour/ChangeLog index c385393b23..57195ca555 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -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 diff --git a/harbour/contrib/hbwin/tests/oletst2.vbs b/harbour/contrib/hbwin/tests/oletst2.vbs index 38b4d43f5a..e113fb49b8 100644 --- a/harbour/contrib/hbwin/tests/oletst2.vbs +++ b/harbour/contrib/hbwin/tests/oletst2.vbs @@ -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() diff --git a/harbour/contrib/rddsql/sqlbase.c b/harbour/contrib/rddsql/sqlbase.c index 9cb5fad543..7d268c4256 100644 --- a/harbour/contrib/rddsql/sqlbase.c +++ b/harbour/contrib/rddsql/sqlbase.c @@ -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; } diff --git a/harbour/contrib/sddfb/sddfb.c b/harbour/contrib/sddfb/sddfb.c index a6a39a36dd..5226d075ff 100644 --- a/harbour/contrib/sddfb/sddfb.c +++ b/harbour/contrib/sddfb/sddfb.c @@ -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; } diff --git a/harbour/contrib/sddmy/sddmy.c b/harbour/contrib/sddmy/sddmy.c index 12ac71e8a2..6631f8b7b7 100644 --- a/harbour/contrib/sddmy/sddmy.c +++ b/harbour/contrib/sddmy/sddmy.c @@ -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; } diff --git a/harbour/contrib/sddoci/sddoci.c b/harbour/contrib/sddoci/sddoci.c index b060407ada..2132c1ac2a 100644 --- a/harbour/contrib/sddoci/sddoci.c +++ b/harbour/contrib/sddoci/sddoci.c @@ -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; } diff --git a/harbour/contrib/sddodbc/sddodbc.c b/harbour/contrib/sddodbc/sddodbc.c index f8e800a75a..f7a4216636 100644 --- a/harbour/contrib/sddodbc/sddodbc.c +++ b/harbour/contrib/sddodbc/sddodbc.c @@ -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; } diff --git a/harbour/contrib/sddpg/sddpg.c b/harbour/contrib/sddpg/sddpg.c index 5c6ec40ca4..6fdc9f61f3 100644 --- a/harbour/contrib/sddpg/sddpg.c +++ b/harbour/contrib/sddpg/sddpg.c @@ -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: diff --git a/harbour/contrib/sddsqlt3/sddsqlt3.c b/harbour/contrib/sddsqlt3/sddsqlt3.c index e504666abc..3d1e5ffddb 100644 --- a/harbour/contrib/sddsqlt3/sddsqlt3.c +++ b/harbour/contrib/sddsqlt3/sddsqlt3.c @@ -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; }