Delphi · 2023年11月22日 0

DIOCP v5版本中的BUG

单元文件 utils_strings 中有这么一段代码

function TDBufferBuilder.ToString: String;
begin
  CheckNeedSize(2);
  FData[FSize] := 0;
  FData[FSize + 1] := 0; 
{$IFDEF MSWINDOWS}
  {$IF (RTLVersion>=26) and (not Defined(NEXTGEN))}
  TEncoding.Default.GetString(FData, 0, self.Length);   //这句有BUG
  {$ELSE}
  Result := StrPas(PAnsiChar(@FData[0]));
  {$IFEND >=XE5}
{$ELSE}  
  Result := TEncoding.Default.GetString(FData, 0, self.Length);
{$ENDIF}
end;
Pascal

其中的

TEncoding.Default.GetString(FData, 0, self.Length);
Pascal

应调整为

Result := TEncoding.Default.GetString(FData, 0, self.Length);
Pascal

否则调用 Request.GetBodyAsString; 时,无法获取HTTP 中的 body值