2008-08-04 22:13 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)

* harbour/contrib/rddads/adsfunc.c
    ! fixed possibly unclosed AdsCloseSQLStatement()

  * harbour/contrib/rddads/ads1.c
    * minor cleanup and protection against possible strange results
      caused by indexes without tags

  * harbour/source/rtl/hbinet.c
    ! added protection against using wrong handles
    ! fixed possible resource leak (unclosed handle) when open handle is
      passed to HB_INETCONNECT[IP]()

  * harbour/source/rtl/filesys.c
    * cleaned warnings
This commit is contained in:
Przemyslaw Czerpak
2008-08-04 20:14:55 +00:00
parent f685ed3713
commit 4e00128f64
5 changed files with 100 additions and 19 deletions

View File

@@ -8,6 +8,22 @@
2008-12-31 13:59 UTC+0100 Foo Bar <foo.bar@foobar.org>
*/
2008-08-04 22:13 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/contrib/rddads/adsfunc.c
! fixed possibly unclosed AdsCloseSQLStatement()
* harbour/contrib/rddads/ads1.c
* minor cleanup and protection against possible strange results
caused by indexes without tags
* harbour/source/rtl/hbinet.c
! added protection against using wrong handles
! fixed possible resource leak (unclosed handle) when open handle is
passed to HB_INETCONNECT[IP]()
* harbour/source/rtl/filesys.c
* cleaned warnings
2008-08-04 20:24 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
* include/hbdefs.h
! Fixed 4 remaining warnings in BCC 5.8.2 builds.

View File

@@ -3356,7 +3356,7 @@ static ERRCODE adsOrderListAdd( ADSAREAP pArea, LPDBORDERINFO pOrderInfo )
( char * ) hb_itemGetCPtr( pOrderInfo->atomBagName ), EF_CANDEFAULT );
return FAILURE;
}
if( !pArea->hOrdCurrent )
if( !pArea->hOrdCurrent && u16ArrayLen > 0 )
{
pArea->hOrdCurrent = ahIndex[ 0 ];
return SELF_GOTOP( ( AREAP ) pArea );
@@ -3404,7 +3404,6 @@ static ERRCODE adsOrderListDelete( ADSAREAP pArea, LPDBORDERINFO pOrderInfo )
}
}
return FAILURE;
}
static ERRCODE adsOrderListFocus( ADSAREAP pArea, LPDBORDERINFO pOrderInfo )
@@ -3452,6 +3451,9 @@ static ERRCODE adsOrderListFocus( ADSAREAP pArea, LPDBORDERINFO pOrderInfo )
}
u32RetVal = AdsGetIndexHandleByOrder( pArea->hTable, u16Order, &hIndex );
}
else
hIndex = pArea->hOrdCurrent;
if( u32RetVal != AE_SUCCESS )
{
/* ntx compatibilty: keep current order if failed */
@@ -3593,16 +3595,16 @@ static ERRCODE adsOrderCreate( ADSAREAP pArea, LPDBORDERCREATEINFO pOrderInfo )
if( fClose )
{
ADSHANDLE ahIndex[ 50 ];
UNSIGNED16 pusArrayLen = 50;
UNSIGNED16 usArrayLen = 50;
u32RetVal = AdsOpenIndex( pArea->hTable,
( UNSIGNED8 * ) pOrderInfo->abBagName, ahIndex, &pusArrayLen );
( UNSIGNED8 * ) pOrderInfo->abBagName, ahIndex, &usArrayLen );
if( u32RetVal != AE_SUCCESS && u32RetVal != AE_INDEX_ALREADY_OPEN )
{
SELF_ORDSETCOND( ( AREAP ) pArea, NULL );
return FAILURE;
}
pArea->hOrdCurrent = ahIndex[ 0 ];
pArea->hOrdCurrent = usArrayLen ? ahIndex[ 0 ] : 0;
}
return SELF_GOTOP( ( AREAP ) pArea );

View File

@@ -1183,16 +1183,10 @@ HB_FUNC( ADSCREATESQLSTATEMENT )
fResult = TRUE;
}
else
/* QUESTION: Is this right? [vszakats] */
hb_rddReleaseCurrentArea();
}
#if 0
/* QUESTION: Shouldn't we call AdsCloseSQLStatement() if pArea was NULL? [vszakats] */
else
AdsCloseSQLStatement( adsStatementHandle );
#endif
}
else
if( !fResult )
AdsCloseSQLStatement( adsStatementHandle );
}
}

View File

@@ -2290,7 +2290,7 @@ HB_EXPORT USHORT hb_fsCurDirBuff( USHORT uiDrive, BYTE * pbyBuffer, ULONG ulLen
{
uiCurDrv = hb_fsCurDrv() + 1;
if( uiDrive != uiCurDrv )
hb_fsChDrv( ( USHORT ) ( uiDrive - 1 ) );
hb_fsChDrv( ( BYTE ) ( uiDrive - 1 ) );
}
#endif
@@ -2325,7 +2325,7 @@ HB_EXPORT USHORT hb_fsCurDirBuff( USHORT uiDrive, BYTE * pbyBuffer, ULONG ulLen
if( uiDrive != uiCurDrv )
{
hb_fsChDrv( ( USHORT ) ( uiCurDrv - 1 ) );
hb_fsChDrv( ( BYTE ) ( uiCurDrv - 1 ) );
hb_fsSetError( usError );
}

View File

@@ -148,13 +148,12 @@
#define HB_SOCKET_INIT( s, p ) \
do { \
s = ( HB_SOCKET_STRUCT *) hb_gcAlloc( sizeof( HB_SOCKET_STRUCT ), hb_inetSocketFinalize );\
p = hb_itemPutPtrGC( p, s );\
HB_SOCKET_ZERO_ERROR( s );\
memset( s, '\0', sizeof( HB_SOCKET_STRUCT ) );\
s->com = ( HB_SOCKET_T ) -1;\
s->count = 0;\
s->timeout = -1;\
s->timelimit = -1;\
s->caPeriodic = NULL;\
s->errorDesc = "";\
p = hb_itemPutPtrGC( p, s );\
} while( 0 )
#ifndef MSG_NOSIGNAL
@@ -227,6 +226,16 @@ static void hb_inetLinuxSigusrHandle( int sig )
/* JC1: we need it volatile to be minimally thread safe. */
static volatile int s_iSessions = 0;
static BOOL hb_inetIsOpen( HB_SOCKET_STRUCT *Socket )
{
if( Socket->com == ( HB_SOCKET_T ) -1 )
{
HB_SOCKET_SET_ERROR2( Socket, -4, "Closed socket" );
return FALSE;
}
return TRUE;
}
/* Useful utility function to have a timeout; */
static int hb_selectReadSocket( HB_SOCKET_STRUCT *Socket )
@@ -779,6 +788,8 @@ HB_FUNC( HB_INETGETSNDBUFSIZE )
if( Socket == NULL )
hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
else if( !hb_inetIsOpen( Socket ) )
hb_retni( -1 );
else
{
int value;
@@ -788,7 +799,6 @@ HB_FUNC( HB_INETGETSNDBUFSIZE )
#else
getsockopt( Socket->com, SOL_SOCKET, SO_SNDBUF, ( void * ) &value, &len );
#endif
hb_retni( value );
}
}
@@ -798,6 +808,8 @@ HB_FUNC( HB_INETGETRCVBUFSIZE )
if( Socket == NULL )
hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
else if( !hb_inetIsOpen( Socket ) )
hb_retni( -1 );
else
{
int value;
@@ -817,6 +829,8 @@ HB_FUNC( HB_INETSETSNDBUFSIZE )
if( Socket == NULL )
hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
else if( !hb_inetIsOpen( Socket ) )
hb_retni( -1 );
else
{
int value = hb_parni( 2 );
@@ -835,6 +849,8 @@ HB_FUNC( HB_INETSETRCVBUFSIZE )
if( Socket == NULL )
hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
else if( !hb_inetIsOpen( Socket ) )
hb_retni( -1 );
else
{
int value = hb_parni( 2 );
@@ -866,6 +882,11 @@ static void s_inetRecvInternal( int iMode )
hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
return;
}
else if( !hb_inetIsOpen( Socket ) )
{
hb_retni( 0 );
return;
}
pBuffer = hb_itemUnShare( pBuffer );
buffer = hb_itemGetCPtr( pBuffer );
@@ -975,6 +996,11 @@ static void s_inetRecvPattern( char *szPattern )
hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
return;
}
else if( !hb_inetIsOpen( Socket ) )
{
hb_retni( 0 );
return;
}
if( pBufferSize )
{
@@ -1131,6 +1157,13 @@ HB_FUNC( HB_INETRECVENDBLOCK )
hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
return;
}
else if( !hb_inetIsOpen( Socket ) )
{
if( pResult )
hb_itemPutNI( pResult, -1 );
hb_retc( NULL );
return;
}
if( pProto )
{
@@ -1316,6 +1349,11 @@ HB_FUNC( HB_INETDATAREADY )
hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
return;
}
else if( !hb_inetIsOpen( Socket ) )
{
hb_retl( FALSE );
return;
}
HB_SOCKET_ZERO_ERROR( Socket );
@@ -1354,6 +1392,11 @@ static void s_inetSendInternal( int iMode )
hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
return;
}
else if( !hb_inetIsOpen( Socket ) )
{
hb_retni( 0 );
return;
}
Buffer = hb_itemGetCPtr( pBuffer );
iSend = ( int ) hb_itemGetCLen( pBuffer );
@@ -1600,6 +1643,10 @@ HB_FUNC( HB_INETACCEPT )
hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
return;
}
else if( !hb_inetIsOpen( Socket ) )
{
return;
}
Len = sizeof( struct sockaddr_in );
@@ -1678,6 +1725,11 @@ HB_FUNC( HB_INETCONNECT )
if( Socket != NULL )
{
if( Socket->com != ( HB_SOCKET_T ) -1 )
{
HB_INET_CLOSE( Socket->com );
Socket->com = ( HB_SOCKET_T ) -1;
}
HB_SOCKET_ZERO_ERROR( Socket );
}
else
@@ -1736,6 +1788,11 @@ HB_FUNC( HB_INETCONNECTIP )
if( Socket != NULL )
{
if( Socket->com != ( HB_SOCKET_T ) -1 )
{
HB_INET_CLOSE( Socket->com );
Socket->com = ( HB_SOCKET_T ) -1;
}
HB_SOCKET_ZERO_ERROR( Socket );
}
else
@@ -1917,6 +1974,12 @@ HB_FUNC( HB_INETDGRAMSEND )
hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
return;
}
else if( !hb_inetIsOpen( Socket ) )
{
Socket->count = 0;
hb_retni( 0 );
return;
}
Socket->remote.sin_family = AF_INET;
Socket->remote.sin_port = htons( iPort );
@@ -1975,6 +2038,12 @@ HB_FUNC( HB_INETDGRAMRECV )
hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
return;
}
else if( !hb_inetIsOpen( Socket ) )
{
Socket->count = 0;
hb_retni( -1 );
return;
}
pBuffer = hb_itemUnShare( pBuffer );
Buffer = hb_itemGetCPtr( pBuffer );