* Fix anumval wrong overwriting as found out by Sergey

git-svn-id: trunk@17861 -
This commit is contained in:
pierre 2011-06-28 20:39:53 +00:00
parent 4f12937bb3
commit c07bcefb6b

View File

@ -1805,27 +1805,34 @@ implementation
if oneval<>'' then if oneval<>'' then
begin begin
if oneval[1]='-' then if oneval[1]='-' then
val(oneval,signedval,code) begin
val(oneval,signedval,code);
anumval:=qword(signedval);
end
else else
val(oneval,anumval,code); val(oneval,anumval,code);
if code<>0 then if code<>0 then
Comment(V_Error,'Invalid number '+avalue) Comment(V_Error,'Invalid number '+avalue)
else if (indexpos<MAXVAL) then else
begin begin
anumval:=qword(signedval); if (indexpos<MAXVAL) then
if source_info.endian<>target_info.endian then begin
swapendian(anumval); if source_info.endian<>target_info.endian then
{ No range checking here } swapendian(anumval);
{ No range checking here }
if bytesize=1 then if bytesize=1 then
bytevalues[indexpos]:=byte(anumval) bytevalues[indexpos]:=byte(anumval)
else if bytesize=2 then else if bytesize=2 then
twobytevalues[indexpos]:=word(anumval) twobytevalues[indexpos]:=word(anumval)
else if bytesize=4 then else if bytesize=4 then
fourbytevalues[indexpos]:=dword(anumval) fourbytevalues[indexpos]:=dword(anumval)
else if bytesize=8 then else if bytesize=8 then
eightbytevalues[indexpos]:=anumval; eightbytevalues[indexpos]:=anumval;
inc(indexpos); inc(indexpos);
end
else
Comment(V_Error,'Buffer overrun in Order_values');
end; end;
end; end;
until allvals=''; until allvals='';