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);