Podaje funkcje w której wystepuje blad :
function gg_login_hash(haslo: string; klucz: int):int;
var
x, y, z, i :Integer;
begin
y := klucz;
x := 0;
for i := 1 to length(haslo) do
begin
x := (x and $ffffff00) or ord(haslo[i]);
y := y xor x;
y := y + x; <<-----------------TU WYSTĘPUJE BŁAD-----------------------
x := x shl 8;
y := y xor x;
x := x shl 8;
y := y - x;
x := x shl 8;
y := y xor x;
z := y and $1F;
y := (y shl z ) or (y shr (32-z));
end;
result :=y;
end;
begin
result:=-1;
try
{$IFDEF TIMEBOMB}
if (YearOf(Now)<>2003) and
((YearOf(Now)=2004) and (MonthOf(Now)>3)) then exit;
{$ENDIF}
if FSSL then IdTCPClient1.IOHandler := IdSSLIOHandlerSocket1
else IdTCPClient1.IOHandler := nil;
if not IdTCPClient1.Connected then
begin
with IdTCPClient1 do
begin
//Connect
Host := FHost;
Port := FPort;
Connect(CONNECT_TIMEOUT);
//Header
GetMem(pointer_pakiet,sizeof(TGG_Header));
ReadBuffer(pointer_pakiet^,sizeof(TGG_Header));
pakiet_header := PGG_Header(pointer_pakiet);
if (pakiet_header^._type = DEF_GG_WELCOME)
and (pakiet_header^._length = sizeof(TGG_Welcome)) then
begin
FreeMem(pointer_pakiet);
//Welcome
GetMem(pointer_pakiet,sizeof(TGG_Welcome));
ReadBuffer(pointer_pakiet^,sizeof(TGG_Welcome));
pakiet_welcome := PGG_Welcome(pointer_pakiet);
hash:=pakiet_welcome^._seed;
FreeMem(pointer_pakiet);
//Login header
GetMem(pointer_pakiet,sizeof(TGG_Header));
pakiet_header := PGG_Header(pointer_pakiet);
pakiet_header^._type:=DEF_GG_LOGIN;
pakiet_header^._length:=sizeof(TGG_Login);
WriteBuffer(pakiet_header^,sizeof(TGG_Header));
FreeMem(pointer_pakiet);
//Login
GetMem(pointer_pakiet,sizeof(TGG_Login));
pakiet_login := PGG_Login(pointer_pakiet);
pakiet_login^._uin:=FLogin;
pakiet_login^._hash:=gg_login_hash(FPassword,hash);
pakiet_login^._status :=$14; //NIEWIDOCZNY
pakiet_login^._version:=$21; //GG_HAS_AUDIO_MASK 0x40000000 v6.0
pakiet_login^._image_size:=FMaxImageSize; //$14; //
pakiet_login^._unknown2:= $be; //
//pakiet_login^._local_ip:= $1901a8c0; //
//pakiet_login^._local_port:= $060e; //
WriteBuffer(pakiet_login^, sizeof(TGG_Login));
FreeMem(pointer_pakiet);
GetMem(pointer_pakiet,sizeof(TGG_Header));
ReadBuffer(pointer_pakiet^,sizeof(TGG_Header));
pakiet_header := PGG_Header(pointer_pakiet);
if pakiet_header^._type=DEF_GG_LOGIN_OK then
begin
FreeMem(pointer_pakiet);
//List empty header
GetMem(pointer_pakiet,sizeof(TGG_Header));
pakiet_header := PGG_Header(pointer_pakiet);
pakiet_header^._type:=DEF_GG_LIST_EMPTY;
pakiet_header^._length:=0;
WriteBuffer(pakiet_header^,sizeof(TGG_Header));
FreeMem(pointer_pakiet);
RecvThread.Resume;
Timer.Enabled:=true;
result:=0;
end
else
begin
FreeMem(pointer_pakiet);
result:=1;
end;
end else result:=1;
end; //with
end;
except
on E:Exception do result:=1;
end;
end;