Browse Source

* check for 2gb limit when inserting record fields

peter 21 years ago
parent
commit
a1b8d8bf6b
1 changed files with 12 additions and 3 deletions
  1. 12 3
      compiler/symtable.pas

+ 12 - 3
compiler/symtable.pas

@@ -974,7 +974,7 @@ implementation
 
     procedure tabstractrecordsymtable.insertfield(sym : tvarsym;addsym:boolean);
       var
-        l,
+        l      : aint;
         varalignrecord,
         varalignfield,
         varalign : longint;
@@ -1020,7 +1020,13 @@ implementation
           varalign:=size_2_align(l);
         varalignfield:=used_align(varalign,aktalignment.recordalignmin,fieldalignment);
         tvarsym(sym).fieldoffset:=align(datasize,varalignfield);
-        datasize:=tvarsym(sym).fieldoffset+l;
+        if (aword(l)+tvarsym(sym).fieldoffset)>high(aint) then
+          begin
+            Message(sym_e_segment_too_large);
+            datasize:=high(aint);
+          end
+        else
+          datasize:=tvarsym(sym).fieldoffset+l;
         { Calc alignment needed for this record }
         if (usefieldalignment=-1) then
           varalignrecord:=used_align(varalign,aktalignment.recordalignmin,aktalignment.maxCrecordalign)
@@ -2307,7 +2313,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.147  2004-05-23 20:56:14  peter
+  Revision 1.148  2004-05-25 18:50:50  peter
+    * check for 2gb limit when inserting record fields
+
+  Revision 1.147  2004/05/23 20:56:14  peter
     * don't generate incompatible types when there is an errordef
 
   Revision 1.146  2004/05/22 23:34:28  peter