<div dir="ltr">Hello,<div><br></div><div>I've tested the CustHttpApp unit in new released FPC 2.6.4 on Windows, and the error "Missing HTTP protocol version in request" still continues.</div><div><br></div><div>

I'll show detailed steps (including my tools) to reproduce it:</div><div><div><br></div><div>1. on Windows (I'm using 8), download and install the latest Lazarus/FPC version: "<a href="http://downloads.sourceforge.net/project/lazarus/Lazarus%20Windows%2032%20bits/Lazarus%201.2.2/lazarus-1.2.2-fpc-2.6.4-win32.exe">http://downloads.sourceforge.net/project/lazarus/Lazarus%20Windows%2032%20bits/Lazarus%201.2.2/lazarus-1.2.2-fpc-2.6.4-win32.exe</a>";</div>

<div>2. download this source code (the project to reproduce the bug) from link "<a href="https://www.dropbox.com/s/rmfitgh7b58cf1g/es_bug.zip">https://www.dropbox.com/s/rmfitgh7b58cf1g/es_bug.zip</a>" or in attachment;</div>

<div>3. in "Tools | Options ..." menu, got to the "Debugger > Language Exceptions" page, and check the "Notify on Lazarus Exceptions" option; </div><div>4. run the project with F9 (notice that I left a breakpoint);</div>

<div>5. using the "Advanced REST client" Chrome plugin "<a href="https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo">https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo</a>", fill the URL with "<a href="http://localhost:1025">http://localhost:1025</a>" and click in "Send" button;</div>

<div>6. push F9 until the Lazarus exits from breakpoint;</div><div>7. wait a few moments, that Lazarus will go to the breakpoint after some secounds;</div><div><br></div><div><br></div><div>When Lazarus go to the breakpoint again, push F8 several times, and notice that in line 363, the "R" variable will receive the zero value:</div>

<div><br></div><div>...</div><div><div>  Procedure FillBuffer;</div><div><br></div><div>  Var</div><div>    R : Integer;</div><div><br></div><div>  begin</div><div>    SetLength(FBuffer,ReadBufLen);</div><div>    r:=FSocket.Read(FBuffer[1],ReadBufLen); <<< HERE!</div>

<div>    If r<0 then</div><div>      Raise EHTTPServer.Create(SErrReadingSocket);</div><div>    if (r<ReadBuflen) then</div><div>      SetLength(FBuffer,r);</div><div>  end;</div></div><div>...</div><div><br></div>
<div>
And the FBuffer will be empty, so in line 485, the "S" variable will be empty:</div><div><br></div><div>...</div><div><div>Var</div><div>  S : String;</div><div><br></div><div>begin</div><div>  Request.Method:=GetNextWord(AStartLine);</div>

<div>  Request.URL:=GetNextWord(AStartLine);</div><div>  Request.PathInfo:=Request.URL;</div><div>  S:=GetNextWord(AStartLine); <<< HERE!</div><div>  If (Pos('HTTP/',S)<>1) then</div><div>    Raise Exception.Create(SErrMissingProtocol);</div>

<div>  Delete(S,1,5);</div><div>  Request.ProtocolVersion:=trim(S);</div><div>end;</div></div><div>...</div><div><br></div><div>Causing the related error.</div><div><br></div><div>Thanks and sorry for the long e-mail!</div>

<div><br></div>-- <br>Silvio Clécio<br>My public projects - <a href="http://github.com/silvioprog" target="_blank">github.com/silvioprog</a>
</div></div>