2009-01-29 02:16 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)

* harbour/source/common/hbprintf.c
    * minor modification for easier future updating

  * harbour/source/rdd/dbfntx/dbfntx1.c
    ! fixed possible GPF caused by corrupted indexes

  * harbour/source/rdd/dbfcdx/dbfcdx1.c
    ! fixed possible GPF caused by missing RT error
    ! added RT errors for invalid KEY or FOR expressions
This commit is contained in:
Przemyslaw Czerpak
2009-01-29 01:12:07 +00:00
parent 0e498e5e77
commit 36f30d85cc
4 changed files with 29 additions and 5 deletions

View File

@@ -8,6 +8,17 @@
2008-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org)
*/
2009-01-29 02:16 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/common/hbprintf.c
* minor modification for easier future updating
* harbour/source/rdd/dbfntx/dbfntx1.c
! fixed possible GPF caused by corrupted indexes
* harbour/source/rdd/dbfcdx/dbfcdx1.c
! fixed possible GPF caused by missing RT error
! added RT errors for invalid KEY or FOR expressions
2009-01-28 22:28 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/vm/itemapi.c
% eliminated hb_snpritf() from HB_IT_POINTER conversion in

View File

@@ -123,6 +123,14 @@ HB_EXTERN_END
# define __NO_LONGLONG__
#endif
#ifndef va_copy
# ifdef __va_copy
# define va_copy( dst, src ) __va_copy( dst, src )
# else
# define va_copy( dst, src ) ( (dst) = (src) )
# endif
#endif
/* few macros for some platform dependent floating point functions/macros */
#define _HB_NUM_NAN 1
@@ -943,7 +951,7 @@ int hb_snprintf_c( char * buffer, size_t bufsize, const char * format, ... )
/* else error, wrong format */
}
else
width = va_arg( args, int );
width = va_arg_n( args, _x_int, 0 );
}
else if( c >= '0' && c <= '9' )
c = get_decimal( c, &format, &width );
@@ -967,7 +975,7 @@ int hb_snprintf_c( char * buffer, size_t bufsize, const char * format, ... )
/* else error, wrong format */
}
else
precision = va_arg( args, int );
precision = va_arg_n( args, _x_int, 0 );
}
else if( c >= '0' && c <= '9' )
c = get_decimal( c, &format, &precision );

View File

@@ -3572,10 +3572,10 @@ static void hb_cdxTagLoad( LPCDXTAG pTag )
pTag->AscendKey = pTag->UsrAscend = ( HB_GET_LE_UINT16( tagHeader.ascendFlg ) == 0 );
pTag->UsrUnique = FALSE;
if ( pTag->OptFlags & CDX_TYPE_STRUCTURE || ! *pTag->KeyExpr )
if( pTag->OptFlags & CDX_TYPE_STRUCTURE )
return;
if ( SELF_COMPILE( ( AREAP ) pTag->pIndex->pArea, ( BYTE * ) pTag->KeyExpr ) == FAILURE )
if( !*pTag->KeyExpr || SELF_COMPILE( ( AREAP ) pTag->pIndex->pArea, ( BYTE * ) pTag->KeyExpr ) == FAILURE )
{
pTag->RootBlock = 0; /* To force RT error - index corrupted */
return;
@@ -7457,7 +7457,10 @@ static ERRCODE hb_cdxOrderCreate( CDXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo
}
if( SELF_COMPILE( (AREAP) pArea, ( BYTE * ) hb_itemGetCPtr( pOrderInfo->abExpr ) ) == FAILURE )
{
hb_cdxErrorRT( pArea, EG_DATATYPE, EDBF_INVALIDKEY, NULL, 0, 0, NULL );
return FAILURE;
}
pKeyExp = pArea->valResult;
pArea->valResult = NULL;
@@ -7539,6 +7542,7 @@ static ERRCODE hb_cdxOrderCreate( CDXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo
{
hb_vmDestroyBlockOrMacro( pKeyExp );
SELF_GOTO( ( AREAP ) pArea, ulRecNo );
hb_cdxErrorRT( pArea, EG_DATATYPE, EDBF_INVALIDFOR, NULL, 0, 0, NULL );
return FAILURE;
}
pForExp = pArea->valResult;

View File

@@ -1972,6 +1972,7 @@ static void hb_ntxIndexFlush( LPNTXINDEX pIndex )
{
hb_ntxPageSave( pIndex, pPage );
++pPage->iUsed;
/* hack */
hb_ntxPageRelease( pIndex->lpTags[0], pPage );
}
else
@@ -1988,7 +1989,7 @@ static void hb_ntxIndexFlush( LPNTXINDEX pIndex )
if( pIndex->Changed )
hb_ntxIndexHeaderSave( pIndex );
}
else
else if( pIndex->iTags )
{
if( pIndex->Changed || pIndex->lpTags[ 0 ]->HdrChanged )
hb_ntxTagHeaderSave( pIndex->lpTags[ 0 ] );