Du hast
immer einen Pufferüberlauf, egal wie lang der String ist ... die 8 KB (4000 Zeichen) sind reiner Zufall, daß es da knallt.
GetMem(Buffer, (Len + 1) * SizeOf(Char));
.
PS: Das GetMem gehört vor das Try, denn wenn es schon beim Try knallt, dann hast du ein hier Problem, mit einer verfäschten Fehlermeldung.
GetMem > OutOfMemory > finally > Fehler beim Freigeben des Nichtexistierenden und nicht initialisierten Buffer.
Delphi-Quellcode:
resservieren;
try
...
finally
freigeben;
end;
GetMem > OutOfMemory > finally wird nicht ausgeführt > OutOfMemory
Statt GetMem und FreeMem solltest du hier vielleicht auch besser auf was Anderes ausweichen ... ich weiß zwar grad nicht mehr was, aber es gibt irgendwo Equivalente dafür, welche die Länge in Chars und nicht in Bytes annehmen und PChar/PAnsiChar/PWideChar zurückgeben.