Beware of SalStrLop (in TD3.1)

If SalStrLop( sString ) is applied to an empty string then strange things can happen. This is because Gupta sets the internal buffer length to zero. When this string is concatenated to another string (say sString2) then the buffer length of sString2 will be shrinked by 1 each time. When you pass such a string to an external dll function crashes might occur because the string will be copied but only to the length of the buffer. Usually the terminating zero will then be stripped away. You get the picture.

Here is some code that shows the problem:

Set sTest = ''
Set sTest2 = 'A'
Set nBuffer = SalStrGetBufferLength( sTest ) ! nBuffer is 1 - just the trailing zero
Set nBuffer = SalStrGetBufferLength( sTest2 ) ! nBuffer is 2 - 'A' and trailing zero
Call SalStrLop( sTest )
Set nBuffer = SalStrGetBufferLength( sTest ) ! nBuffer is 0!
Set sTest2 = sTest2 || sTest
Set nBuffer = SalStrGetBufferLength( sTest2 ) ! nBuffer is 1!!

Workaround: Only apply SalStrLop when the string is not empty. Maybe write a function like this:

!!CB!! 134
Function: StrLopSafe
 Description:
 Returns
  Number:
 Parameters
  Receive String: sIn
 Static Variables
 Local variables
 Actions
  If ( sIn )
   Return SalStrLop( sIn )
  Else
   Return 0

In TD6.3 this problem does not exist.

Happy coding!

Advertisements

Über thomasuttendorfer
Ich bin Entwicklungsleiter bei der Softwarefirma [ frevel & fey ] in München. Wir entwickeln Business-Software für Verlage und verwenden dafür den Gupta Team-Developer sowie Visual Studio.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: