<?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:19:58 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-96641</title>
      <link>https://db.gcve.eu/vuln/fkie_cve-2026-96641</link>
      <description>&lt;p&gt;Pillow is a Python imaging library. Prior to 13.0.0, PILfont text-width accumulation in src/_imaging.c checks positive glyph advances against INT_MAX but does not check negative advances against INT_MIN. Repeating a signed 16-bit advance of -32768 can therefore execute a signed C integer overflow in xsize += dx, producing a large positive width from a negative mathematical result. Applications that use getlength(), getsize(), or derived layout, quota, serialization, or allocation calculations can experience logic-integrity errors or resource consumption, while the high-level mask path commonly retains a decompression-bomb check. This issue is fixed in version 13.0.0.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;Pillow is a Python imaging library. Prior to 13.0.0, PILfont text-width accumulation in src/_imaging.c checks positive glyph advances against INT_MAX but does not check negative advances against INT_MIN. Repeating a signed 16-bit advance of -32768 can therefore execute a signed C integer overflow in xsize += dx, producing a large positive width from a negative mathematical result. Applications that use getlength(), getsize(), or derived layout, quota, serialization, or allocation calculations can experience logic-integrity errors or resource consumption, while the high-level mask path commonly retains a decompression-bomb check. 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-96641</guid>
    </item>
    <item>
      <title>GHSA-4rm8-3hmm-39fg — Pillow: Reachable undefined behavior in native integer operations, potentially leading to denial of service or logic in…</title>
      <link>https://db.gcve.eu/vuln/ghsa-4rm8-3hmm-39fg</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: pillow&lt;/p&gt;
&lt;p&gt;### Summary
Affected Object and Source&lt;/p&gt;
&lt;p&gt;Package: Pillow 12.3.0
Source: PyPI sdist pillow-12.3.0.tar.gz
SHA-256: 3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce
Sink: src/_imaging.c:2809:15, xsize += dx&lt;/p&gt;
&lt;p&gt;### Details
The code in Pillow 12.3.0 is:
```c
for (xsize = 0; *text; text++) {
    int dx = self-&amp;gt;glyphs[*text].dx;
    if (dx &amp;gt; 0 &amp;amp;&amp;amp; xsize &amp;gt; INT_MAX - dx) {
        PyErr_SetString(PyExc_OverflowError, &amp;#34;Width too large&amp;#34;);
        return -1;
    }
    xsize += dx;
}
```
The PILfont glyph advance is parsed from a signed 16-bit field, so the valid range for `dx` is `[-32768, 32767]`. The existing check only proves:
`dx &amp;gt; 0 =&amp;gt; xsize &amp;lt;= INT_MAX - dx`
It does **not** prove the other half of the contract:
`dx &amp;lt; 0 =&amp;gt; xsize &amp;gt;= INT_MIN - dx`
Taking `dx = -32768` and repeating it 65,537 times, the mathematical sum is `-2,147,516,416`, which is less than `INT_MIN = -2,147,483,648`. On the 65,537th addition, the operation `-2147483648 + -32768` is performed, resulting in **C signed overflow undefined behavior**.&lt;/p&gt;
&lt;p&gt;### PoC
```python
&amp;#34;&amp;#34;&amp;#34;Minimal public-API reproducer for the Pillow 12.3.0 textwidth underflow.&lt;/p&gt;
&lt;p&gt;Run with an ordinary Pillow 12.3.0 build to observe the wrapped width, or with
the PyC-Contract UBSan build to obtain the exact native diagnostic.
&amp;#34;&amp;#34;&amp;#34;&lt;/p&gt;
&lt;p&gt;from __future__ import annotations&lt;/p&gt;
&lt;p&gt;import struct
from io import BytesIO&lt;/p&gt;
&lt;p&gt;import PIL
from PIL import Image, ImageFont&lt;/p&gt;
&lt;p&gt;ADVANCE = -(2**15)
CONTROL_REPEAT = 65_536
WITNESS_REPEAT = 65_537&lt;/p&gt;
&lt;p&gt;def bitmap_font(advance: int)…&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
Affected Object and Source&lt;/p&gt;
&lt;p&gt;Package: Pillow 12.3.0
Source: PyPI sdist pillow-12.3.0.tar.gz
SHA-256: 3b8182a766685eaa002637e28b4ec8d6b18819a0c71f579bf0dbaa5830297cce
Sink: src/_imaging.c:2809:15, xsize += dx&lt;/p&gt;
&lt;p&gt;### Details
The code in Pillow 12.3.0 is:
```c
for (xsize = 0; *text; text++) {
    int dx = self-&amp;gt;glyphs[*text].dx;
    if (dx &amp;gt; 0 &amp;amp;&amp;amp; xsize &amp;gt; INT_MAX - dx) {
        PyErr_SetString(PyExc_OverflowError, &amp;#34;Width too large&amp;#34;);
        return -1;
    }
    xsize += dx;
}
```
The PILfont glyph advance is parsed from a signed 16-bit field, so the valid range for `dx` is `[-32768, 32767]`. The existing check only proves:
`dx &amp;gt; 0 =&amp;gt; xsize &amp;lt;= INT_MAX - dx`
It does **not** prove the other half of the contract:
`dx &amp;lt; 0 =&amp;gt; xsize &amp;gt;= INT_MIN - dx`
Taking `dx = -32768` and repeating it 65,537 times, the mathematical sum is `-2,147,516,416`, which is less than `INT_MIN = -2,147,483,648`. On the 65,537th addition, the operation `-2147483648 + -32768` is performed, resulting in **C signed overflow undefined behavior**.&lt;/p&gt;
&lt;p&gt;### PoC
```python
&amp;#34;&amp;#34;&amp;#34;Minimal public-API reproducer for the Pillow 12.3.0 textwidth underflow.&lt;/p&gt;
&lt;p&gt;Run with an ordinary Pillow 12.3.0 build to observe the wrapped width, or with
the PyC-Contract UBSan build to obtain the exact native diagnostic.
&amp;#34;&amp;#34;&amp;#34;&lt;/p&gt;
&lt;p&gt;from __future__ import annotations&lt;/p&gt;
&lt;p&gt;import struct
from io import BytesIO&lt;/p&gt;
&lt;p&gt;import PIL
from PIL import Image, ImageFont&lt;/p&gt;
&lt;p&gt;ADVANCE = -(2**15)
CONTROL_REPEAT = 65_536
WITNESS_REPEAT = 65_537&lt;/p&gt;
&lt;p&gt;def bitmap_font(advance: int)…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-4rm8-3hmm-39fg</guid>
    </item>
    <item>
      <title>UBUNTU-CVE-2026-96641</title>
      <link>https://db.gcve.eu/vuln/ubuntu-cve-2026-96641</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. Prior to 13.0.0, PILfont text-widt ...)&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. Prior to 13.0.0, PILfont text-widt ...)&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ubuntu-cve-2026-96641</guid>
    </item>
  </channel>
</rss>
