* fixed buffer overrun in TExternalAssembler.AsmWrite(ansistring) in case the

ansistring's length is > AsmOutSize

git-svn-id: branches/jvmbackend@19637 -
This commit is contained in:
Jonas Maebe 2011-11-14 22:57:34 +00:00
parent c42e4178c5
commit 38c090c1a2

View File

@ -480,14 +480,27 @@ Implementation
Procedure TExternalAssembler.AsmWrite(const s:ansistring);
var
StartIndex, ToWrite: longint;
begin
if s='' then
exit;
if OutCnt+length(s)>=AsmOutSize then
AsmFlush;
Move(s[1],OutBuf[OutCnt],length(s));
inc(OutCnt,length(s));
inc(AsmSize,length(s));
StartIndex:=1;
ToWrite:=length(s);
while ToWrite>AsmOutSize do
begin
Move(s[StartIndex],OutBuf[OutCnt],AsmOutSize);
inc(OutCnt,AsmOutSize);
inc(AsmSize,AsmOutSize);
AsmFlush;
inc(StartIndex,AsmOutSize);
dec(ToWrite,AsmOutSize);
end;
Move(s[StartIndex],OutBuf[OutCnt],ToWrite);
inc(OutCnt,ToWrite);
inc(AsmSize,ToWrite);
end;