2009-01-14 01:38 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)

* harbour/source/rtl/gtxwc/gtxwc.c
    ! added protection against inaccessible character cell value
      what could cause accessing uninitialized memory and GPF

  * harbour/include/hbrdddbf.h
    ! fixed HB_DIRTYREAD() macro not updated when RDDI_* settings were
      converted from global to thread local

  * harbour/source/rdd/dbf1.c
  * harbour/source/rdd/dbfntx/dbfntx1.c
  * harbour/source/rdd/dbfnsx/dbfnsx1.c
  * harbour/source/rdd/dbfcdx/dbfcdx1.c
  * harbour/source/rdd/dbffpt/dbffpt1.c
    % replaced <RDD>NODE_DATA() and <RDD>AREA_DATA() macros defined
      in each RDD by common for all DBF bases RDDs DBFNODE_DATA() and
      DBFAREA_DATA() macros defined in hbrdddbf.h to reduce possible
      mistakes in code updating in the future
This commit is contained in:
Przemyslaw Czerpak
2009-01-14 00:35:33 +00:00
parent 558525e5b5
commit 39ffeed5f9
8 changed files with 67 additions and 49 deletions

View File

@@ -5380,7 +5380,7 @@ static ERRCODE hb_dbfRddInfo( LPRDDNODE pRDD, USHORT uiIndex, ULONG ulConnect, P
HB_TRACE(HB_TR_DEBUG, ("hb_dbfRddInfo(%p, %hu, %lu, %p)", pRDD, uiIndex, ulConnect, pItem));
pData = ( LPDBFDATA ) hb_stackGetTSD( ( PHB_TSD ) pRDD->lpvCargo );
pData = DBFNODE_DATA( pRDD );
switch( uiIndex )
{

View File

@@ -82,9 +82,6 @@
#include "rddsys.ch"
#include "hbregex.h"
#define CDXNODE_DATA( p ) ( ( LPDBFDATA ) hb_stackGetTSD( ( PHB_TSD ) ( p )->lpvCargo ) )
#define CDXAREA_DATA( p ) CDXNODE_DATA( SELF_RDDNODE( p ) )
#ifndef HB_CDP_SUPPORT_OFF
/* for nation sorting support */
#include "hbapicdp.h"
@@ -7078,14 +7075,14 @@ static ERRCODE hb_cdxOpen( CDXAREAP pArea, LPDBOPENINFO pOpenInfo )
}
/* open (production) structural index */
if( CDXAREA_DATA( pArea )->fStrictStruct ? pArea->fHasTags : hb_setGetAutOpen() )
if( DBFAREA_DATA( pArea )->fStrictStruct ? pArea->fHasTags : hb_setGetAutOpen() )
{
char szFileName[ _POSIX_PATH_MAX + 1 ];
pArea->fHasTags = FALSE;
hb_cdxCreateFName( pArea, NULL, NULL, szFileName, NULL );
if ( hb_spFile( ( BYTE * ) szFileName, NULL ) ||
CDXAREA_DATA( pArea )->fStrictStruct )
DBFAREA_DATA( pArea )->fStrictStruct )
{
DBORDERINFO pOrderInfo;
@@ -7300,7 +7297,7 @@ static ERRCODE hb_cdxOrderListClear( CDXAREAP pArea )
if ( FAST_GOCOLD( ( AREAP ) pArea ) == FAILURE )
return FAILURE;
hb_cdxOrdListClear( pArea, !( CDXAREA_DATA( pArea )->fStrictStruct ?
hb_cdxOrdListClear( pArea, !( DBFAREA_DATA( pArea )->fStrictStruct ?
pArea->fHasTags : hb_setGetAutOpen() ), NULL );
pArea->uiTag = 0;
@@ -7323,7 +7320,7 @@ static ERRCODE hb_cdxOrderListDelete( CDXAREAP pArea, LPDBORDERINFO pOrderInfo )
hb_cdxCreateFName( pArea, hb_itemGetCPtr( pOrderInfo->atomBagName ), &fProd,
szFileName, szTagName );
if( fProd && ( CDXAREA_DATA( pArea )->fStrictStruct ?
if( fProd && ( DBFAREA_DATA( pArea )->fStrictStruct ?
pArea->fHasTags : hb_setGetAutOpen() ) )
pIndex = NULL;
else
@@ -7606,7 +7603,7 @@ static ERRCODE hb_cdxOrderCreate( CDXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo
if ( !pArea->lpdbOrdCondInfo ||
( pArea->lpdbOrdCondInfo->fAll && !pArea->lpdbOrdCondInfo->fAdditive ) )
hb_cdxOrdListClear( pArea, !( CDXAREA_DATA( pArea )->fStrictStruct ?
hb_cdxOrdListClear( pArea, !( DBFAREA_DATA( pArea )->fStrictStruct ?
pArea->fHasTags : hb_setGetAutOpen() ), NULL );
pIndex = hb_cdxFindBag( pArea, szFileName );
@@ -7730,7 +7727,7 @@ static ERRCODE hb_cdxOrderCreate( CDXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo
if ( pArea->lpdbOrdCondInfo && ( !pArea->lpdbOrdCondInfo->fAll &&
!pArea->lpdbOrdCondInfo->fAdditive ) )
{
hb_cdxOrdListClear( pArea, !( CDXAREA_DATA( pArea )->fStrictStruct ?
hb_cdxOrdListClear( pArea, !( DBFAREA_DATA( pArea )->fStrictStruct ?
pArea->fHasTags : hb_setGetAutOpen() ), NULL );
}
hb_cdxIndexUnLockWrite( pIndex );
@@ -7739,7 +7736,7 @@ static ERRCODE hb_cdxOrderCreate( CDXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo
{
pArea->fHasTags = TRUE;
if ( !pArea->fReadonly && ( pArea->dbfHeader.bHasTags & 0x01 ) == 0 &&
( hb_setGetAutOpen() || CDXAREA_DATA( pArea )->fStrictStruct ) )
( hb_setGetAutOpen() || DBFAREA_DATA( pArea )->fStrictStruct ) )
SELF_WRITEDBHEADER( ( AREAP ) pArea );
}
else
@@ -7807,7 +7804,7 @@ static ERRCODE hb_cdxOrderDestroy( CDXAREAP pArea, LPDBORDERINFO pOrderInfo )
pArea->fHasTags = FALSE;
if ( !pArea->fReadonly && ( pArea->dbfHeader.bHasTags & 0x01 ) != 0 &&
( hb_setGetAutOpen() ||
CDXAREA_DATA( pArea )->fStrictStruct ) )
DBFAREA_DATA( pArea )->fStrictStruct ) )
SELF_WRITEDBHEADER( ( AREAP ) pArea );
}
}
@@ -8638,7 +8635,7 @@ static ERRCODE hb_cdxRddInfo( LPRDDNODE pRDD, USHORT uiIndex, ULONG ulConnect, P
HB_TRACE(HB_TR_DEBUG, ("hb_cdxRddInfo(%p, %hu, %lu, %p)", pRDD, uiIndex, ulConnect, pItem));
pData = CDXNODE_DATA( pRDD );
pData = DBFNODE_DATA( pRDD );
switch( uiIndex )
{

View File

@@ -78,9 +78,6 @@
# include "hbapicdp.h"
#endif
#define FPTNODE_DATA( p ) ( ( LPDBFDATA ) hb_stackGetTSD( ( PHB_TSD ) ( p )->lpvCargo ) )
#define FPTAREA_DATA( p ) FPTNODE_DATA( SELF_RDDNODE( p ) )
#define FPT_BLOCK_OFFSET( b ) ( ( HB_FOFFSET ) ( b ) * \
( HB_FOFFSET ) pArea->uiMemoBlockSize )
@@ -4685,7 +4682,7 @@ static ERRCODE hb_fptInfo( FPTAREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
}
else
{
LPDBFDATA pData = FPTAREA_DATA( pArea );
LPDBFDATA pData = DBFAREA_DATA( pArea );
char * szMFileExt;
if( pData->szMemoExt[ 0 ] )
hb_itemPutC( pItem, pData->szMemoExt );
@@ -4987,7 +4984,7 @@ static ERRCODE hb_fptRddInfo( LPRDDNODE pRDD, USHORT uiIndex, ULONG ulConnect, P
HB_TRACE(HB_TR_DEBUG, ("hb_fptRddInfo(%p, %hu, %lu, %p)", pRDD, uiIndex, ulConnect, pItem));
pData = FPTNODE_DATA( pRDD );
pData = DBFNODE_DATA( pRDD );
switch( uiIndex )
{

View File

@@ -76,9 +76,6 @@ static RDDFUNCS nsxSuper;
static USHORT s_uiRddId;
#define NSXNODE_DATA( p ) ( ( LPDBFDATA ) hb_stackGetTSD( ( PHB_TSD ) ( p )->lpvCargo ) )
#define NSXAREA_DATA( p ) NSXNODE_DATA( SELF_RDDNODE( p ) )
#define hb_nsxKeyFree(K) hb_xfree(K)
#define hb_nsxFileOffset(I,B) ( (B) << ( (I)->LargeFile ? NSX_PAGELEN_BITS : 0 ) )
#define hb_nsxGetRecSize(r) ( (r) < 0x10000 ? 2 : ( (r) < 0x1000000 ? 3 : 4 ) )
@@ -1612,7 +1609,7 @@ static LPTAGINFO hb_nsxTagNew( LPNSXINDEX pIndex, const char * szTagName,
pTag->fUsrDescend = !pTag->AscendKey;
pTag->UniqueKey = fUnique;
pTag->Custom = fCustom;
pTag->MultiKey = fCustom && NSXAREA_DATA( pIndex->pArea )->fMultiKey;
pTag->MultiKey = fCustom && DBFAREA_DATA( pIndex->pArea )->fMultiKey;
pTag->KeyType = ucKeyType;
pTag->KeyLength = uiKeyLen;
pTag->TrailChar = bTrail;
@@ -6422,14 +6419,14 @@ static ERRCODE hb_nsxOpen( NSXAREAP pArea, LPDBOPENINFO pOpenInfo )
errCode = SUPER_OPEN( ( AREAP ) pArea, pOpenInfo );
if( errCode == SUCCESS && ( NSXAREA_DATA( pArea )->fStrictStruct ?
if( errCode == SUCCESS && ( DBFAREA_DATA( pArea )->fStrictStruct ?
pArea->fHasTags : hb_setGetAutOpen() ) )
{
char szFileName[ _POSIX_PATH_MAX + 1 ];
hb_nsxCreateFName( pArea, NULL, NULL, szFileName, NULL );
if( hb_spFile( ( BYTE * ) szFileName, NULL ) ||
NSXAREA_DATA( pArea )->fStrictStruct )
DBFAREA_DATA( pArea )->fStrictStruct )
{
DBORDERINFO pOrderInfo;
@@ -6839,7 +6836,7 @@ static ERRCODE hb_nsxOrderCreate( NSXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo
*pIndexPtr = pIndex;
}
if( pIndex->Production && !pArea->fHasTags &&
( NSXAREA_DATA( pArea )->fStrictStruct || hb_setGetAutOpen() ) )
( DBFAREA_DATA( pArea )->fStrictStruct || hb_setGetAutOpen() ) )
{
pArea->fHasTags = TRUE;
if( !pArea->fReadonly && ( pArea->dbfHeader.bHasTags & 0x01 ) == 0 )
@@ -6886,7 +6883,7 @@ static ERRCODE hb_nsxOrderDestroy( NSXAREAP pArea, LPDBORDERINFO pOrderInfo )
pIndex->fDelete = TRUE;
hb_nsxIndexFree( pIndex );
if( fProd && pArea->fHasTags &&
( NSXAREA_DATA( pArea )->fStrictStruct || hb_setGetAutOpen() ) )
( DBFAREA_DATA( pArea )->fStrictStruct || hb_setGetAutOpen() ) )
{
pArea->fHasTags = FALSE;
if( !pArea->fReadonly && ( pArea->dbfHeader.bHasTags & 0x01 ) != 0 )
@@ -7705,7 +7702,7 @@ static ERRCODE hb_nsxOrderListClear( NSXAREAP pArea )
while( *pIndexPtr )
{
pIndex = *pIndexPtr;
if( pIndex->Production && ( NSXAREA_DATA( pArea )->fStrictStruct ?
if( pIndex->Production && ( DBFAREA_DATA( pArea )->fStrictStruct ?
pArea->fHasTags : hb_setGetAutOpen() ) )
{
pIndexPtr = &pIndex->pNext;
@@ -7737,7 +7734,7 @@ static ERRCODE hb_nsxOrderListDelete( NSXAREAP pArea, LPDBORDERINFO pOrderInfo )
pIndex = hb_nsxFindBag( pArea, szFileName );
if( pIndex && !( pIndex->Production &&
( NSXAREA_DATA( pArea )->fStrictStruct ?
( DBFAREA_DATA( pArea )->fStrictStruct ?
pArea->fHasTags : hb_setGetAutOpen() ) ) )
{
pIndexPtr = &pArea->lpIndexes;
@@ -7837,7 +7834,7 @@ static ERRCODE hb_nsxRddInfo( LPRDDNODE pRDD, USHORT uiIndex, ULONG ulConnect, P
HB_TRACE(HB_TR_DEBUG, ("hb_nsxRddInfo(%p, %hu, %lu, %p)", pRDD, uiIndex, ulConnect, pItem));
pData = NSXNODE_DATA( pRDD );
pData = DBFNODE_DATA( pRDD );
switch( uiIndex )
{

View File

@@ -157,9 +157,6 @@ static RDDFUNCS ntxSuper;
static USHORT s_uiRddId;
#define NTXNODE_DATA( p ) ( ( LPDBFDATA ) hb_stackGetTSD( ( PHB_TSD ) ( p )->lpvCargo ) )
#define NTXAREA_DATA( p ) NTXNODE_DATA( SELF_RDDNODE( p ) )
#define hb_ntxKeyFree(K) hb_xfree(K)
#define hb_ntxFileOffset(I,B) ( (B) << ( (I)->LargeFile ? NTXBLOCKBITS : 0 ) )
#define hb_ntxPageBuffer(p) ( (p)->buffer )
@@ -1416,7 +1413,7 @@ static LPTAGINFO hb_ntxTagNew( LPNTXINDEX pIndex,
pTag->fUsrDescend = !pTag->AscendKey;
pTag->UniqueKey = fUnique;
pTag->Custom = fCustom;
pTag->MultiKey = fCustom && NTXAREA_DATA( pIndex->Owner )->fMultiKey;
pTag->MultiKey = fCustom && DBFAREA_DATA( pIndex->Owner )->fMultiKey;
pTag->KeyType = bKeyType;
pTag->KeyLength = uiKeyLen;
pTag->KeyDec = uiKeyDec;
@@ -6034,14 +6031,14 @@ static ERRCODE ntxOpen( NTXAREAP pArea, LPDBOPENINFO pOpenInfo )
errCode = SUPER_OPEN( ( AREAP ) pArea, pOpenInfo );
if( errCode == SUCCESS && NTXAREA_DATA( pArea )->fStruct &&
( NTXAREA_DATA( pArea )->fStrictStruct ? pArea->fHasTags : hb_setGetAutOpen() ) )
if( errCode == SUCCESS && DBFAREA_DATA( pArea )->fStruct &&
( DBFAREA_DATA( pArea )->fStrictStruct ? pArea->fHasTags : hb_setGetAutOpen() ) )
{
char szFileName[ _POSIX_PATH_MAX + 1 ];
hb_ntxCreateFName( pArea, NULL, NULL, szFileName, NULL );
if( hb_spFile( ( BYTE * ) szFileName, NULL ) ||
NTXAREA_DATA( pArea )->fStrictStruct )
DBFAREA_DATA( pArea )->fStrictStruct )
{
DBORDERINFO pOrderInfo;
@@ -6237,7 +6234,7 @@ static ERRCODE ntxOrderCreate( NTXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo )
SELF_GOTO( ( AREAP ) pArea, ulRecNo );
pData = NTXAREA_DATA( pArea );
pData = DBFAREA_DATA( pArea );
/*
* abBagName -> cBag, atomBagName -> cTag
* The following scheme implemented:
@@ -6547,8 +6544,8 @@ static ERRCODE ntxOrderDestroy( NTXAREAP pArea, LPDBORDERINFO pOrderInfo )
pIndex->fDelete = TRUE;
hb_ntxIndexFree( pIndex );
if( fProd && pArea->fHasTags &&
NTXAREA_DATA( pArea )->fStruct &&
( NTXAREA_DATA( pArea )->fStrictStruct || hb_setGetAutOpen() ) )
DBFAREA_DATA( pArea )->fStruct &&
( DBFAREA_DATA( pArea )->fStrictStruct || hb_setGetAutOpen() ) )
{
pArea->fHasTags = FALSE;
if( !pArea->fReadonly && ( pArea->dbfHeader.bHasTags & 0x01 ) != 0 )
@@ -7376,8 +7373,8 @@ static ERRCODE ntxOrderListClear( NTXAREAP pArea )
while( *pIndexPtr )
{
pIndex = *pIndexPtr;
if( NTXAREA_DATA( pArea )->fStruct && pIndex->Production &&
( NTXAREA_DATA( pArea )->fStrictStruct ? pArea->fHasTags :
if( DBFAREA_DATA( pArea )->fStruct && pIndex->Production &&
( DBFAREA_DATA( pArea )->fStrictStruct ? pArea->fHasTags :
hb_setGetAutOpen() ) )
{
pIndexPtr = &pIndex->pNext;
@@ -7408,8 +7405,8 @@ static ERRCODE ntxOrderListDelete( NTXAREAP pArea, LPDBORDERINFO pOrderInfo )
szFileName, szTagName );
pIndex = hb_ntxFindBag( pArea, szFileName );
if( pIndex && !( pIndex->Production && NTXAREA_DATA( pArea )->fStruct &&
( NTXAREA_DATA( pArea )->fStrictStruct ?
if( pIndex && !( pIndex->Production && DBFAREA_DATA( pArea )->fStruct &&
( DBFAREA_DATA( pArea )->fStrictStruct ?
pArea->fHasTags : hb_setGetAutOpen() ) ) )
{
pIndexPtr = &pArea->lpIndexes;
@@ -7510,7 +7507,7 @@ static ERRCODE ntxInit( LPRDDNODE pRDD )
errCode = SUPER_INIT( pRDD );
#if !defined( HB_NTX_NOMULTITAG )
if( errCode == SUCCESS )
NTXNODE_DATA( pRDD )->fMultiTag = TRUE;
DBFNODE_DATA( pRDD )->fMultiTag = TRUE;
#endif
return errCode;
@@ -7522,7 +7519,7 @@ static ERRCODE ntxRddInfo( LPRDDNODE pRDD, USHORT uiIndex, ULONG ulConnect, PHB_
HB_TRACE(HB_TR_DEBUG, ("ntxRddInfo(%p, %hu, %lu, %p)", pRDD, uiIndex, ulConnect, pItem));
pData = NTXNODE_DATA( pRDD );
pData = DBFNODE_DATA( pRDD );
switch( uiIndex )
{

View File

@@ -2510,7 +2510,14 @@ static void hb_gt_xwc_RepaintChar( PXWND_DEF wnd, int colStart, int rowStart, in
*/
while( icol <= colStop )
{
HB_GTSELF_GETSCRCHAR( wnd->pGT, irow, icol, &color, &attr, &usCh16 );
if( HB_GTSELF_GETSCRCHAR( wnd->pGT, irow, icol, &color, &attr, &usCh16 ) )
{
color = 0x07;
attr = 0;
usCh16 = ' ';
}
else
usCh16 &= 0xff;
ulCurr = hb_gt_xwc_HashCurrChar( attr, color, usCh16 );
if( wnd->charTrans[ usCh16 ].inverse )
{