Explorar o código

* fixed some off-by-1 errors in TOmfRecord_PUBDEF.EncodeTo

git-svn-id: trunk@30491 -
nickysn %!s(int64=10) %!d(string=hai) anos
pai
achega
fb45d5e11b
Modificáronse 1 ficheiros con 3 adicións e 4 borrados
  1. 3 4
      compiler/omfbase.pas

+ 3 - 4
compiler/omfbase.pas

@@ -865,7 +865,7 @@ implementation
         RawRecord.RecordType:=RT_PUBDEF;
 
       NextOfs:=RawRecord.WriteIndexedRef(0,BaseGroupIndex);
-      NextOfs:=RawRecord.WriteIndexedRef(0,BaseSegmentIndex);
+      NextOfs:=RawRecord.WriteIndexedRef(NextOfs,BaseSegmentIndex);
       if BaseSegmentIndex=0 then
         begin
           RawRecord.RawData[NextOfs]:=Byte(BaseFrame);
@@ -879,10 +879,9 @@ implementation
       repeat
         Inc(LastIncludedIndex);
         Inc(Len,TOmfPublicNameElement(PublicNames[LastIncludedIndex]).GetLengthInFile(Is32Bit));
-      until (LastIncludedIndex>=PublicNames.Count) or ((Len+TOmfPublicNameElement(PublicNames[LastIncludedIndex+1]).GetLengthInFile(Is32Bit))>=RecordLengthLimit);
+      until (LastIncludedIndex>=(PublicNames.Count-1)) or ((Len+TOmfPublicNameElement(PublicNames[LastIncludedIndex+1]).GetLengthInFile(Is32Bit))>=RecordLengthLimit);
 
       { write the public names... }
-      NextOfs:=0;
       for I:=NextIndex to LastIncludedIndex do
         begin
           PubName:=TOmfPublicNameElement(PublicNames[I]);
@@ -903,7 +902,7 @@ implementation
             end;
           NextOfs:=RawRecord.WriteIndexedRef(NextOfs,PubName.TypeIndex);
         end;
-      RawRecord.RecordLength:=Len;
+      RawRecord.RecordLength:=Len+1;
       RawRecord.CalculateChecksumByte;
 
       { update NextIndex }