From 74e24a38642b79458b6b32d311a30f0d463ce094 Mon Sep 17 00:00:00 2001 From: mattias <nc-gaertnma@netcologne.de> Date: Thu, 22 Jun 2023 12:30:40 +0200 Subject: [PATCH] fcl-web: TWSFramePayload.ReadData: check for endless loop and wait for new data --- packages/fcl-web/src/websocket/fpwebsocket.pp | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/packages/fcl-web/src/websocket/fpwebsocket.pp b/packages/fcl-web/src/websocket/fpwebsocket.pp index 3b6ecd24be..cb514c03dc 100644 --- a/packages/fcl-web/src/websocket/fpwebsocket.pp +++ b/packages/fcl-web/src/websocket/fpwebsocket.pp @@ -881,21 +881,33 @@ Const Var Buf : TBytes; aPos,toRead : QWord; - aCount : Longint; + aCount, FailCnt : Longint; begin Buf:=[]; ToRead:=DataLength; aPos:=0; + FailCnt:=0; Repeat aCount:=ToRead; if aCount>MaxBufSize then aCount:=MaxBufSize; SetLength(Buf,aCount); aCount := aTransport.ReadBytes(Buf,aCount); - Move(Buf[0],Content[aPos],aCount); - Inc(aPos,aCount); - ToRead:=DataLength-aPos; + if aCount>0 then + begin + Move(Buf[0],Content[aPos],aCount); + Inc(aPos,aCount); + ToRead:=DataLength-aPos; + FailCnt:=0; + end + else + begin + sleep(1); + inc(FailCnt); + if FailCnt>100 then + raise Exception.Create('20230316102741 TWSFramePayload.ReadData'); + end; Until (ToRead<=0); end; @@ -912,7 +924,7 @@ begin LenFlag := buffer[1] and FlagLengthMask; Case LenFlag of - FlagTwoBytes: + FlagTwoBytes: begin aTransport.ReadBytes(Buffer,2); Paylen16:=Buffer.ToWord(0);