Skip to content

Commit 6f79ab0

Browse files
Benoit Lagaeitext-teamcity
authored andcommitted
Make Free Refs in xref refer to next Free Ref
DEVSIX-1428 Autoported commit. Original commit hash: [a3e57f271]
1 parent 312c9bb commit 6f79ab0

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

itext/itext.kernel/itext/kernel/pdf/PdfXrefTable.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,6 @@ protected internal virtual void WriteXrefTableAndTrailer(PdfDocument document, P
158158
foreach (int? objNr in freeReferences) {
159159
xref[(int)objNr].genNr++;
160160
}
161-
freeReferences.Clear();
162161
for (int i = count; i > 0; --i) {
163162
PdfIndirectReference lastRef = xref[i];
164163
if (lastRef == null || (lastRef.IsFree() && lastRef.GetGenNumber() == 0) || (!lastRef.CheckState(PdfObject
@@ -276,7 +275,18 @@ protected internal virtual void WriteXrefTableAndTrailer(PdfDocument document, P
276275
writer.WriteInteger(first).WriteSpace().WriteInteger(len).WriteByte((byte)'\n');
277276
for (int i = first; i < first + len; i++) {
278277
PdfIndirectReference reference = xrefTable.Get(i);
279-
StringBuilder off = new StringBuilder("0000000000").Append(reference.GetOffset());
278+
StringBuilder off = new StringBuilder("0000000000");
279+
if (reference.IsFree()) {
280+
if (!freeReferences.IsEmpty()) {
281+
off.Append(freeReferences.PollFirst());
282+
}
283+
}
284+
else {
285+
/* if (freeReferences.isEmpty()), then we are at the
286+
last free reference. Its referral value must be object 0.
287+
*/
288+
off.Append(reference.GetOffset());
289+
}
280290
StringBuilder gen = new StringBuilder("00000").Append(reference.GetGenNumber());
281291
writer.WriteString(off.JSubstring(off.Length - 10, off.Length)).WriteSpace().WriteString(gen.JSubstring(gen
282292
.Length - 5, gen.Length)).WriteSpace();
@@ -307,6 +317,7 @@ protected internal virtual void WriteXrefTableAndTrailer(PdfDocument document, P
307317
writer.Write(document.GetTrailer());
308318
writer.Write('\n');
309319
}
320+
freeReferences.Clear();
310321
WriteKeyInfo(writer);
311322
writer.WriteString("startxref\n").WriteLong(startxref).WriteString("\n%%EOF\n");
312323
xref = null;

port-hash

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
31e6078b70a83542f4cbf63b465170f6198aebc4
1+
a3e57f271528164aa1f9ef737a1095287c4d3e13

0 commit comments

Comments
 (0)