<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://db.gcve.eu/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-10-23T22:23:01.123954+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>info@gcve.eu</email>
  </author>
  <link href="https://db.gcve.eu" rel="alternate"/>
  <generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator>
  <subtitle>Contains only the most 10 recent entries.</subtitle>
  <entry>
    <id>https://db.gcve.eu/vuln/cve-2026-112893</id>
    <title>CVE-2026-112893 — Pillow: Invalid free in FreeType glyph rendering when a stroker is active</title>
    <updated>2026-10-23T22:23:01.126196+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> python-pillow Pillow</p>
<p>Pillow is a Python imaging library. From 10.0.0 until 13.0.0, Pillow can free an invalid glyph pointer during FreeType rendering with an active stroker. If FT_Load_Glyph fails, cleanup may call FT_Done_Glyph on an uninitialized or stale glyph variable. An attacker can supply a malformed font as untrusted bytes to an application that draws text with a nonzero stroke width, forcing the glyph-load failure path. This can corrupt memory or crash the process. This issue is fixed in version 13.0.0.</p></div>
    </content>
    <link href="https://db.gcve.eu/vuln/cve-2026-112893"/>
  </entry>
  <entry>
    <id>https://db.gcve.eu/vuln/ghsa-j4m9-6w36-pw47</id>
    <title>GHSA-j4m9-6w36-pw47 — Pillow: Invalid free in FreeType glyph rendering when a stroker is active</title>
    <updated>2026-10-23T22:23:01.126296+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: pillow</p>
<p>### Summary
When text is drawn with a non-zero stroke width, Pillow creates a FreeType stroker and then loads each glyph. If `FT_Load_Glyph` fails for a glyph, the cleanup path calls `FT_Done_Glyph` on the `glyph` variable. That variable is not initialized before the first measurement loop, and in the render loop it is not reset to NULL after each glyph is freed. A malformed font loaded from untrusted bytes can force the load error and reach this free. This is a latent memory-safety defect; whether it crashes depends on the value in the uninitialized or stale pointer.</p>
<p>### Details
`glyph` is declared without a NULL initializer:</p>
<p>- `src/_imagingft.c:848`</p>
<p>The first measurement loop can jump to `glyph_error` before `glyph` is ever assigned:</p>
<p>- `src/_imagingft.c:1010-1013`</p>
<p>In the render loop the glyph is freed at the end of each iteration and not set back to NULL:</p>
<p>- `src/_imagingft.c:1242`</p>
<p>The cleanup frees it whenever a stroker exists:</p>
<p>- `src/_imagingft.c:1253-1256`</p>
<p>`ImageFont.truetype` accepts a file object or bytes, so the font is attacker-suppliable.</p>
<p>### PoC
This needs `fontTools` and any base TTF (the example uses one bundled with Pillow's tests). It rewrites glyph "A" to claim 5000 contours in a glyph body far too short for them, so `FT_Load_Glyph` returns an error while the face still opens.</p>
<p>```python
import struct
from fontTools.ttLib import TTFont
from PIL import Image, ImageFont, ImageDraw</p>
<p>SRC = "Tests/fonts/FreeMono.ttf"          # any TTF works as a base
tt…</p></div>
    </content>
    <link href="https://db.gcve.eu/vuln/ghsa-j4m9-6w36-pw47"/>
  </entry>
</feed>
