浏览代码

* Better check (see bug #23597)

git-svn-id: trunk@23332 -
michael 12 年之前
父节点
当前提交
1ff0b31bf6
共有 1 个文件被更改,包括 10 次插入5 次删除
  1. 10 5
      packages/fcl-web/src/base/custfcgi.pp

+ 10 - 5
packages/fcl-web/src/base/custfcgi.pp

@@ -174,7 +174,8 @@ ResourceString
   SErrReadingSocket = 'Failed to read data from socket. Error: %d';
   SErrReadingHeader = 'Failed to read FastCGI header. Read only %d bytes';
   SErrWritingSocket = 'Failed to write data to socket. Error: %d';
-
+  SErrNoRequest     = 'Internal error: No request available when writing data';
+  
 Implementation
 
 {$ifdef CGIDEBUG}
@@ -413,16 +414,20 @@ var ErrorCode,
     BytesToWrite ,
     BytesWritten  : Integer;
     P : PByte;
+    r : TFCGIRequest;
+    
 begin
+  if Not (Assigned(Request) and (Request is TFCGIRequest)) then
+    Raise Exception.Create(SErrNorequest);
+  R:=TFCGIRequest(Request);
   BytesToWrite := BEtoN(ARecord^.contentLength) + ARecord^.paddingLength+sizeof(FCGI_Header);
   P:=PByte(Arecord);
   Repeat
-    BytesWritten:=FOnWrite(TFCGIRequest(Request).Handle, P^, BytesToWrite,ErrorCode);
+    BytesWritten:=FOnWrite(R.Handle, P^, BytesToWrite,ErrorCode);
     If (BytesWritten<0) then
       begin
-      // TODO : Better checking for closed connection, EINTR
-      IF Assigned(Self.Request) and (Self.Request is TFCGIRequest) then
-        (Self.Request as TFCGIRequest).FKeepConnectionAfterRequest:=False;
+      // TODO : Better checking on ErrorCode
+      R.FKeepConnectionAfterRequest:=False;
       Raise HTTPError.CreateFmt(SErrWritingSocket,[ErrorCode]);
       end;
     Inc(P,BytesWritten);