Просмотр исходного кода

* Fix anumval wrong overwriting as found out by Sergey

git-svn-id: trunk@17861 -
pierre 14 лет назад
Родитель
Сommit
c07bcefb6b
1 измененных файлов с 23 добавлено и 16 удалено
  1. 23 16
      compiler/ogbase.pas

+ 23 - 16
compiler/ogbase.pas

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