Imager::File::PNG versions from 1.003 before 1.004 for Perl write past the end of the row buffer reading a PNG with a tRNS transparency chunk in read_direct8.
With a tRNS chunk, read_direct8() adds an alpha channel to the image it creates but still sizes the row buffer from the original channel count. libpng expands the transparency into that extra channel, so png_read_row() fills one channel more than the buffer holds, at one byte per sample, and writes width bytes past the end of the allocation. Palette images go to read_paletted() and 16-bit images to read_direct16(), which sizes its buffer from png_get_rowbytes() and allocates enough for the expanded row.
The same reader ships bundled in the Imager distribution.
Reading an attacker-supplied PNG through Imager->read() corrupts the heap, which can crash the process.
{
"cna_assigner": "CPANSec",
"cwe_ids": [
"CWE-787"
],
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/73xxx/CVE-2026-73639.json"
}{
"extracted_events": [
{
"range": [
{
"introduced": "1.003"
},
{
"fixed": "1.004"
}
],
"source": "AFFECTED_FIELD",
"strategy": "StandardRange"
},
{
"range": [
{
"introduced": "1.034"
},
{
"fixed": "1.035"
}
],
"source": "AFFECTED_FIELD",
"strategy": "StandardRange"
},
{
"range": [
{
"fixed": "d973bd7e8843f084e8071caa24b89545c88b1e4b"
}
],
"source": "REFERENCES_COMMIT"
}
]
}
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-73639.json"
[
{
"deprecated": false,
"digest": {
"line_hashes": [
"92098837625173272701439476932164955284",
"155340930284150661853425534505066329769",
"192794196166304695670941862924225553416",
"146360290625059573188759078255192700503",
"320736754482995428408547705843734363023",
"246749982309930058317187062964132689541",
"98940639484387815586771609080005004308",
"856089465327438696957969940359122098",
"82858985714269442465771776294181700350",
"289527810321199991122061545466701483034",
"47269755249263090222074133853278984512",
"273777330842901804129775445510801218033",
"122173872448962528612661172528318283975",
"4584476542731253505781892826988072548",
"53225253891853093309707276630894415368",
"3463768907728628300399426892945388421",
"114966046107779748112601707120725552159",
"277267051960966063933550505529698102031",
"334283569745588111814526367047396671807",
"856089465327438696957969940359122098",
"55517380823379775703908319681633018557",
"308574903331823911640437522235250814110",
"227372771051189932267802667537412212506",
"127589918621923408035112829837766750719",
"212344682971151708006066237547809583393",
"79232249039140798215599681111812026115",
"97714927508681689507799463317553556286",
"283819929985981115585337573826559204165",
"4174482202474164063493613712773962299",
"245765197108375903031130880343874720609",
"71164297836442741058032412348903031777",
"856089465327438696957969940359122098"
],
"threshold": 0.9
},
"id": "CVE-2026-73639-13f30347",
"signature_type": "Line",
"signature_version": "v1",
"source": "https://github.com/tonycoz/imager/commit/d973bd7e8843f084e8071caa24b89545c88b1e4b",
"target": {
"file": "PNG/impng.c"
}
},
{
"deprecated": false,
"digest": {
"function_hash": "260934713903637319983164023601036569336",
"length": 1348
},
"id": "CVE-2026-73639-1fcd2214",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/tonycoz/imager/commit/d973bd7e8843f084e8071caa24b89545c88b1e4b",
"target": {
"file": "PNG/impng.c",
"function": "read_direct8"
}
},
{
"deprecated": false,
"digest": {
"function_hash": "270705117611937489761237429365226659381",
"length": 1709
},
"id": "CVE-2026-73639-395624fa",
"signature_type": "Function",
"signature_version": "v1",
"source": "https://github.com/tonycoz/imager/commit/d973bd7e8843f084e8071caa24b89545c88b1e4b",
"target": {
"file": "PNG/impng.c",
"function": "read_direct16"
}
}
]
"2026-10-28T11:12:17Z"