UDF, erro ao passar parametro.

Firebird

01/07/2005

boa tarde senhoras e senhores,

estou adaptando uma rotina de encriptação para ser utilizada em uma UDF, mas quando vou chamar a rotina ocorre o seguinte erro:

[u:85dcd8494f]Arithmetic overflow or division by zero has occurred.
arithmetic exception, numeric overflow, or string truncation.[/u:85dcd8494f]

a rotina é a seguinte:

function encripta(Src: PChar): PChar; cdecl; export;
var
  KeyLen: Integer;
  KeyPos: Integer;
  OffSet: Integer;
  Dest: string;
  Key: string;
  SrcPos: Integer;
  SrcAsc: Integer;
  Range: Integer;
  temp : string;
begin
  result := Src;

  if (Src = ´´) then
    begin
      Result := ´´;
      exit;
    end
  else
    temp := Src;
  Key := ´TLCK 9Y´;
  Dest := ´´;
  KeyLen := Length(Key);
  KeyPos := 0;
  Range := 256;

  Randomize;
  OffSet := Random(Range);
  Dest := Format(´¬1.2x´, [OffSet]);
  for SrcPos := 1 to Length(temp) do
    begin
      SrcAsc := (Ord(temp[SrcPos]) + OffSet) mod 255;
      if KeyPos < KeyLen then
        KeyPos := KeyPos + 1
      else
        KeyPos := 1;

      SrcAsc := SrcAsc xor Ord(Key[KeyPos]);

      Dest := Dest  + Format(´¬1.2x´, [SrcAsc]);

      OffSet := SrcAsc;
    end;

 StrPCopy(Src, Dest);
// StrPCopy(Src, ´AB1017´);
end;

exports
  encripta;

end.



A declaração desta função no banco de dados estou fazendo da seguinte forma:

DECLARE EXTERNAL FUNCTION encripta
CSTRING(50)
RETURNS CSTRING(50)
ENTRY_POINT ´encripta´ MODULE_NAME ´UDFDIV´;


a chamada a ela é a seguinte:

select encripta(modulo) from seguranca;


Como ainda estou adaptando a função os dados estão sem encriptação e seram encriptados apenas quando forem mostrados no select.
Acontece que se eu comentar a linha:

 StrPCopy(Src, Dest);


e descomentar a linha:

 StrPCopy(Src, ´FUNCIONA´);


ai da certo, mas todas as linhas na coluna em que estou usando a função vai logicamente aparecer a palavra funciona. Então acredito que seja um erro de passagem de parametros, se alguem puder me ajudar ficarei muito agradecido.


Tronbr

Tronbr

Curtidas 0
POSTAR