From 7ea6f7578650cf2c906f46fc9f4bd95a9f6baf48 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Sat, 25 Sep 1999 04:16:34 +0000 Subject: [PATCH] 19990925-05:57 GMT+1 --- harbour/ChangeLog | 7 +++++++ harbour/source/vm/dynsym.c | 9 +++++++-- harbour/tests/working/dynsym.prg | 4 ++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index eb3a2efc56..86ad90bc67 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,10 @@ +19990925-05:57 GMT+1 Victor Szel + * source/vm/dynsym.c + ! HB___DYNSGETNAME() now validates the index parameter passed. + Previously it could GPF with 0 or too big index. + * tests/working/dynsym.prg + + Some new lines added to test the situations above. + 19990924-23:10 EDT Paul Tucker * source/vm/dynsym.c * corrected return value of HB___DYNSGETINDEX() diff --git a/harbour/source/vm/dynsym.c b/harbour/source/vm/dynsym.c index d32b33f121..dc6c73deb5 100644 --- a/harbour/source/vm/dynsym.c +++ b/harbour/source/vm/dynsym.c @@ -258,7 +258,12 @@ HARBOUR HB___DYNSCOUNT( void ) /* How much symbols do we have: dsCount = __dynsy HARBOUR HB___DYNSGETNAME( void ) /* Get name of symbol: cSymbol = __dynsymGetName( dsIndex ) */ { - hb_retc( s_pDynItems[ hb_parnl( 1 ) - 1 ].pDynSym->pSymbol->szName ); + LONG lIndex = hb_parnl( 1 ); /* NOTE: This will return zero if the parameter is not numeric */ + + if( lIndex >= 1 && lIndex <= s_uiDynSymbols ) + hb_retc( s_pDynItems[ lIndex - 1 ].pDynSym->pSymbol->szName ); + else + hb_retc( "" ); } HARBOUR HB___DYNSGETINDEX( void ) /* Gimme index number of symbol: dsIndex = __dynsymGetIndex( cSymbol ) */ @@ -269,5 +274,5 @@ HARBOUR HB___DYNSGETINDEX( void ) /* Gimme index number of symbol: dsIndex = __d hb_retnl( ( LONG ) ( s_uiClosestDynSym + 1 ) ); else hb_retnl( 0L ); - } + diff --git a/harbour/tests/working/dynsym.prg b/harbour/tests/working/dynsym.prg index 7e344c13cc..8ec3c7dede 100644 --- a/harbour/tests/working/dynsym.prg +++ b/harbour/tests/working/dynsym.prg @@ -14,5 +14,9 @@ FUNCTION Main() ? "MAIN", nPos ? __dynsGetName( nPos ) + ? __dynsGetName() + ? __dynsGetName( 0 ) + ? __dynsGetName( 100000 ) + ? __dynsGetName( __dynsGetIndex( "HB_THISDOESNTEXIST_" ) ) RETURN NIL