<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://db.gcve.eu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Fri, 23 Oct 2026 21:20:35 +0000</lastBuildDate>
    <item>
      <title>BREW-aider-CVE-2026-112893 — Pillow: Invalid free in FreeType glyph rendering when a stroker is active</title>
      <link>https://db.gcve.eu/vuln/brew-aider-cve-2026-112893</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Homebrew: aider&lt;/p&gt;
&lt;p&gt;### 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.&lt;/p&gt;
&lt;p&gt;### Details
`glyph` is declared without a NULL initializer:&lt;/p&gt;
&lt;p&gt;- `src/_imagingft.c:848`&lt;/p&gt;
&lt;p&gt;The first measurement loop can jump to `glyph_error` before `glyph` is ever assigned:&lt;/p&gt;
&lt;p&gt;- `src/_imagingft.c:1010-1013`&lt;/p&gt;
&lt;p&gt;In the render loop the glyph is freed at the end of each iteration and not set back to NULL:&lt;/p&gt;
&lt;p&gt;- `src/_imagingft.c:1242`&lt;/p&gt;
&lt;p&gt;The cleanup frees it whenever a stroker exists:&lt;/p&gt;
&lt;p&gt;- `src/_imagingft.c:1253-1256`&lt;/p&gt;
&lt;p&gt;`ImageFont.truetype` accepts a file object or bytes, so the font is attacker-suppliable.&lt;/p&gt;
&lt;p&gt;### PoC
This needs `fontTools` and any base TTF (the example uses one bundled with Pillow&amp;#39;s tests). It rewrites glyph &amp;#34;A&amp;#34; 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.&lt;/p&gt;
&lt;p&gt;```python
import struct
from fontTools.ttLib import TTFont
from PIL import Image, ImageFont, ImageDraw&lt;/p&gt;
&lt;p&gt;SRC = &amp;#34;Tests/fonts/FreeMono.ttf&amp;#34;          # any TTF works as a base
tt…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Homebrew: aider&lt;/p&gt;
&lt;p&gt;### 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.&lt;/p&gt;
&lt;p&gt;### Details
`glyph` is declared without a NULL initializer:&lt;/p&gt;
&lt;p&gt;- `src/_imagingft.c:848`&lt;/p&gt;
&lt;p&gt;The first measurement loop can jump to `glyph_error` before `glyph` is ever assigned:&lt;/p&gt;
&lt;p&gt;- `src/_imagingft.c:1010-1013`&lt;/p&gt;
&lt;p&gt;In the render loop the glyph is freed at the end of each iteration and not set back to NULL:&lt;/p&gt;
&lt;p&gt;- `src/_imagingft.c:1242`&lt;/p&gt;
&lt;p&gt;The cleanup frees it whenever a stroker exists:&lt;/p&gt;
&lt;p&gt;- `src/_imagingft.c:1253-1256`&lt;/p&gt;
&lt;p&gt;`ImageFont.truetype` accepts a file object or bytes, so the font is attacker-suppliable.&lt;/p&gt;
&lt;p&gt;### PoC
This needs `fontTools` and any base TTF (the example uses one bundled with Pillow&amp;#39;s tests). It rewrites glyph &amp;#34;A&amp;#34; 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.&lt;/p&gt;
&lt;p&gt;```python
import struct
from fontTools.ttLib import TTFont
from PIL import Image, ImageFont, ImageDraw&lt;/p&gt;
&lt;p&gt;SRC = &amp;#34;Tests/fonts/FreeMono.ttf&amp;#34;          # any TTF works as a base
tt…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/brew-aider-cve-2026-112893</guid>
    </item>
    <item>
      <title>fkie_cve-2026-112893</title>
      <link>https://db.gcve.eu/vuln/fkie_cve-2026-112893</link>
      <description>&lt;p&gt;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.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;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.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/fkie_cve-2026-112893</guid>
    </item>
    <item>
      <title>GHSA-j4m9-6w36-pw47 — Pillow: Invalid free in FreeType glyph rendering when a stroker is active</title>
      <link>https://db.gcve.eu/vuln/ghsa-j4m9-6w36-pw47</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: pillow&lt;/p&gt;
&lt;p&gt;### 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.&lt;/p&gt;
&lt;p&gt;### Details
`glyph` is declared without a NULL initializer:&lt;/p&gt;
&lt;p&gt;- `src/_imagingft.c:848`&lt;/p&gt;
&lt;p&gt;The first measurement loop can jump to `glyph_error` before `glyph` is ever assigned:&lt;/p&gt;
&lt;p&gt;- `src/_imagingft.c:1010-1013`&lt;/p&gt;
&lt;p&gt;In the render loop the glyph is freed at the end of each iteration and not set back to NULL:&lt;/p&gt;
&lt;p&gt;- `src/_imagingft.c:1242`&lt;/p&gt;
&lt;p&gt;The cleanup frees it whenever a stroker exists:&lt;/p&gt;
&lt;p&gt;- `src/_imagingft.c:1253-1256`&lt;/p&gt;
&lt;p&gt;`ImageFont.truetype` accepts a file object or bytes, so the font is attacker-suppliable.&lt;/p&gt;
&lt;p&gt;### PoC
This needs `fontTools` and any base TTF (the example uses one bundled with Pillow&amp;#39;s tests). It rewrites glyph &amp;#34;A&amp;#34; 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.&lt;/p&gt;
&lt;p&gt;```python
import struct
from fontTools.ttLib import TTFont
from PIL import Image, ImageFont, ImageDraw&lt;/p&gt;
&lt;p&gt;SRC = &amp;#34;Tests/fonts/FreeMono.ttf&amp;#34;          # any TTF works as a base
tt…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: pillow&lt;/p&gt;
&lt;p&gt;### 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.&lt;/p&gt;
&lt;p&gt;### Details
`glyph` is declared without a NULL initializer:&lt;/p&gt;
&lt;p&gt;- `src/_imagingft.c:848`&lt;/p&gt;
&lt;p&gt;The first measurement loop can jump to `glyph_error` before `glyph` is ever assigned:&lt;/p&gt;
&lt;p&gt;- `src/_imagingft.c:1010-1013`&lt;/p&gt;
&lt;p&gt;In the render loop the glyph is freed at the end of each iteration and not set back to NULL:&lt;/p&gt;
&lt;p&gt;- `src/_imagingft.c:1242`&lt;/p&gt;
&lt;p&gt;The cleanup frees it whenever a stroker exists:&lt;/p&gt;
&lt;p&gt;- `src/_imagingft.c:1253-1256`&lt;/p&gt;
&lt;p&gt;`ImageFont.truetype` accepts a file object or bytes, so the font is attacker-suppliable.&lt;/p&gt;
&lt;p&gt;### PoC
This needs `fontTools` and any base TTF (the example uses one bundled with Pillow&amp;#39;s tests). It rewrites glyph &amp;#34;A&amp;#34; 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.&lt;/p&gt;
&lt;p&gt;```python
import struct
from fontTools.ttLib import TTFont
from PIL import Image, ImageFont, ImageDraw&lt;/p&gt;
&lt;p&gt;SRC = &amp;#34;Tests/fonts/FreeMono.ttf&amp;#34;          # any TTF works as a base
tt…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-j4m9-6w36-pw47</guid>
    </item>
    <item>
      <title>UBUNTU-CVE-2026-112893</title>
      <link>https://db.gcve.eu/vuln/ubuntu-cve-2026-112893</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Ubuntu:Pro:14.04:LTS: pillow, Ubuntu:Pro:16.04:LTS: pillow, Ubuntu:Pro:18.04:LTS: pillow, Ubuntu:Pro:20.04:LTS: pillow, Ubuntu:Pro:20.04:LTS: pillow-python2, Ubuntu:22.04:LTS: pillow, Ubuntu:24.04:LTS: pillow, Ubuntu:26.10: pillow, Ubuntu:26.04:LTS: pillow&lt;/p&gt;
&lt;p&gt;(Pillow is a Python imaging library. From 10.0.0 until 13.0.0, Pillow c ...)&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Ubuntu:Pro:14.04:LTS: pillow, Ubuntu:Pro:16.04:LTS: pillow, Ubuntu:Pro:18.04:LTS: pillow, Ubuntu:Pro:20.04:LTS: pillow, Ubuntu:Pro:20.04:LTS: pillow-python2, Ubuntu:22.04:LTS: pillow, Ubuntu:24.04:LTS: pillow, Ubuntu:26.10: pillow, Ubuntu:26.04:LTS: pillow&lt;/p&gt;
&lt;p&gt;(Pillow is a Python imaging library. From 10.0.0 until 13.0.0, Pillow c ...)&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ubuntu-cve-2026-112893</guid>
    </item>
  </channel>
</rss>
