libvips is a demand-driven, horizontally threaded image processing library. The heifsave operation could incorrectly determine the presence of an alpha channel in an input when it was not possible to determine the colour interpretation, known internally within libvips as "multiband". There aren't many ways to create a "multiband" input, but it is possible with a well-crafted TIFF image. If a "multiband" TIFF input image had 4 channels and HEIF-based output was requested, this led to libvips creating a 3 channel HEIF image without an alpha channel but then attempting to write 4 channels of data. This caused a heap buffer overflow, which could crash the process. This vulnerability is fixed in 8.16.1.
{ "cwe_ids": [ "CWE-122" ] }
[ { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "function": "histogram_new", "file": "libvips/arithmetic/project.c" }, "deprecated": false, "digest": { "function_hash": "204020809808310251746300681675559292488", "length": 620.0 }, "signature_type": "Function", "id": "CVE-2025-29769-0063a648", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "file": "libvips/colour/LCh2UCS.c" }, "deprecated": false, "digest": { "threshold": 0.9, "line_hashes": [ "146472816832899882966478323424401127517", "148326969278183464372550809532090466944", "182219639003239320448735512808934449634", "155924435074457232687163652552213826156", "336617849283971222837505782177383409653", "803955325889370501923842229077371335" ] }, "signature_type": "Line", "id": "CVE-2025-29769-00c1ae1b", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "file": "libvips/arithmetic/hist_find_indexed.c" }, "deprecated": false, "digest": { "threshold": 0.9, "line_hashes": [ "193108773183593523063244334198615847800", "264945369779496300054931651289675991538", "86915066004139306974228449770797227031", "207801093950959293730776636176370628677", "64554583486337420752129310521102766938" ] }, "signature_type": "Line", "id": "CVE-2025-29769-04e1a71e", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "function": "vips_bandfold_gen", "file": "libvips/conversion/bandfold.c" }, "deprecated": false, "digest": { "function_hash": "219336353028416286600163239812572623554", "length": 738.0 }, "signature_type": "Function", "id": "CVE-2025-29769-06cb308a", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "function": "sink_memory_area_allocate_fn", "file": "libvips/iofuncs/sinkmemory.c" }, "deprecated": false, "digest": { "function_hash": "49482531972001338931917788933450096189", "length": 1248.0 }, "signature_type": "Function", "id": "CVE-2025-29769-0710beed", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "function": "rtiff_memcpy_f16_line", "file": "libvips/foreign/tiff2vips.c" }, "deprecated": false, "digest": { "function_hash": "81195685466037972049142443751421814165", "length": 449.0 }, "signature_type": "Function", "id": "CVE-2025-29769-07c93c75", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "function": "wbuffer_allocate_fn", "file": "libvips/iofuncs/sinkdisc.c" }, "deprecated": false, "digest": { "function_hash": "226757554773432999185031849290785704508", "length": 1563.0 }, "signature_type": "Function", "id": "CVE-2025-29769-1fb62569", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "function": "vips_foreign_load_nsgif_generate", "file": "libvips/foreign/nsgifload.c" }, "deprecated": false, "digest": { "function_hash": "162065518651073381149323774574119761123", "length": 1383.0 }, "signature_type": "Function", "id": "CVE-2025-29769-25cfd41e", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "file": "libvips/iofuncs/sink.c" }, "deprecated": false, "digest": { "threshold": 0.9, "line_hashes": [ "272291151288643359550297672357935186156", "295825767676251176497493997935099637567", "277351185936650717006935512785023070139", "303535540788642997802566058272638721106" ] }, "signature_type": "Line", "id": "CVE-2025-29769-25d6a5b1", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "file": "libvips/conversion/bandfold.c" }, "deprecated": false, "digest": { "threshold": 0.9, "line_hashes": [ "141442950390216318326352839088305770071", "153069353973596181927703545135427839666", "9055500463534748510970152684301091965", "164615813486703122047085905963844179098" ] }, "signature_type": "Line", "id": "CVE-2025-29769-2ca60095", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "function": "vips_bandunfold_gen", "file": "libvips/conversion/bandunfold.c" }, "deprecated": false, "digest": { "function_hash": "172177910203211658879442797228772129995", "length": 856.0 }, "signature_type": "Function", "id": "CVE-2025-29769-39ad95ab", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "function": "vips_image_write_line", "file": "libvips/iofuncs/image.c" }, "deprecated": false, "digest": { "function_hash": "136313937702517628057648004774623903246", "length": 826.0 }, "signature_type": "Function", "id": "CVE-2025-29769-3c98ae87", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "file": "libvips/foreign/jp2ksave.c" }, "deprecated": false, "digest": { "threshold": 0.9, "line_hashes": [ "277026826687837235815190948504319578323", "252722630879511071764624341773658224149", "49889071180197118036636417345194692873", "119968551676930068520052005204735500119" ] }, "signature_type": "Line", "id": "CVE-2025-29769-4c102671", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "function": "vips_col_Ch2hcmc", "file": "libvips/colour/LCh2UCS.c" }, "deprecated": false, "digest": { "function_hash": "66454751116007750885452359630712951636", "length": 731.0 }, "signature_type": "Function", "id": "CVE-2025-29769-51dc2075", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "file": "libvips/iofuncs/image.c" }, "deprecated": false, "digest": { "threshold": 0.9, "line_hashes": [ "224111719122948287673371751216582171456", "290513418336582190457024954504297058084", "69520451101562331025353693862332901778", "40817255997188265090830122362266292339" ] }, "signature_type": "Line", "id": "CVE-2025-29769-54d8197c", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "file": "libvips/foreign/vips2tiff.c" }, "deprecated": false, "digest": { "threshold": 0.9, "line_hashes": [ "115689833891332522440686458280635997257", "40508754931948131137613498287664560942", "298389639304085383603340978501759588667", "129563101249015669603578012539749899962" ] }, "signature_type": "Line", "id": "CVE-2025-29769-597613ab", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "function": "wtiff_copy_tiles", "file": "libvips/foreign/vips2tiff.c" }, "deprecated": false, "digest": { "function_hash": "114021330274702959458823973567211416642", "length": 442.0 }, "signature_type": "Function", "id": "CVE-2025-29769-5fedffe8", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "file": "libvips/arithmetic/project.c" }, "deprecated": false, "digest": { "threshold": 0.9, "line_hashes": [ "250630285592061441462996242439780594535", "121148056315924335082155559554402105049", "121766204676390800623815629539350676340", "25260374781496496573451853141710047134", "16370322979098300526162288795531926709" ] }, "signature_type": "Line", "id": "CVE-2025-29769-6a570517", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "file": "libvips/foreign/webp2vips.c" }, "deprecated": false, "digest": { "threshold": 0.9, "line_hashes": [ "25014365708793849312105565107376123787", "6979766214851900822491636522080970959", "194062793705506041484935398416525435604", "7645406198215832225298928340040545038" ] }, "signature_type": "Line", "id": "CVE-2025-29769-74811e8d", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "function": "vips_foreign_save_webp_sink_disc", "file": "libvips/foreign/webpsave.c" }, "deprecated": false, "digest": { "function_hash": "243377832511917294406550829998174968534", "length": 571.0 }, "signature_type": "Function", "id": "CVE-2025-29769-7c4db7ab", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "file": "libvips/iofuncs/sinkdisc.c" }, "deprecated": false, "digest": { "threshold": 0.9, "line_hashes": [ "70466197837800275671426846784454753898", "32002996136132438557141455686239459372", "277351185936650717006935512785023070139", "303535540788642997802566058272638721106" ] }, "signature_type": "Line", "id": "CVE-2025-29769-7d5d0508", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "file": "libvips/conversion/composite.cpp" }, "deprecated": false, "digest": { "threshold": 0.9, "line_hashes": [ "269934432524418097979283969797131971754", "91630415714778288992856255175593183926", "187281943457099218252227373160068129551", "258043668703769235876002668803825491344" ] }, "signature_type": "Line", "id": "CVE-2025-29769-874e0777", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "file": "libvips/foreign/tiff2vips.c" }, "deprecated": false, "digest": { "threshold": 0.9, "line_hashes": [ "52523319222682133306067690970262988637", "218933073584012078905010539949691704481", "230548712135915964927364027985317706594", "58546834836218732294859452091743856728", "239804529752878341096181055589144925776", "202911701663837746884652638389915571212", "260705589446926322483771404580149949099", "34331004634277756899999991212284680245" ] }, "signature_type": "Line", "id": "CVE-2025-29769-8b3323bf", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "file": "libvips/iofuncs/sinkmemory.c" }, "deprecated": false, "digest": { "threshold": 0.9, "line_hashes": [ "252783723868940395789848860920698113710", "184689510815020467176263032827923398916", "277351185936650717006935512785023070139", "303535540788642997802566058272638721106" ] }, "signature_type": "Line", "id": "CVE-2025-29769-8c370571", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "file": "libvips/conversion/embed.c" }, "deprecated": false, "digest": { "threshold": 0.9, "line_hashes": [ "302361671922933163081884868596792378226", "216318392601005908538537229341969927467", "279984703499309912758272473104122316302", "323552431928893289578256023953586836911" ] }, "signature_type": "Line", "id": "CVE-2025-29769-8fbe1538", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "function": "histogram_new", "file": "libvips/arithmetic/hist_find_indexed.c" }, "deprecated": false, "digest": { "function_hash": "55066222544191457898521205504890021304", "length": 731.0 }, "signature_type": "Function", "id": "CVE-2025-29769-913a4da7", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "function": "lu_decomp", "file": "libvips/mosaicing/matrixinvert.c" }, "deprecated": false, "digest": { "function_hash": "200159597338612280373174958795461821360", "length": 1983.0 }, "signature_type": "Function", "id": "CVE-2025-29769-91f040c1", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "function": "vips_embed_base_paint_edge", "file": "libvips/conversion/embed.c" }, "deprecated": false, "digest": { "function_hash": "337752901805752112892059833783117723676", "length": 865.0 }, "signature_type": "Function", "id": "CVE-2025-29769-9e6e4056", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "function": "vips_image_paint_image", "file": "libvips/foreign/webp2vips.c" }, "deprecated": false, "digest": { "function_hash": "295086633344562358492305010474157156326", "length": 907.0 }, "signature_type": "Function", "id": "CVE-2025-29769-acf859c0", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "file": "libvips/mosaicing/matrixinvert.c" }, "deprecated": false, "digest": { "threshold": 0.9, "line_hashes": [ "104101647814092378979766491578675454821", "81943542041296418169157601065047272728", "171058700349401871254313516766569271451", "255904088170959438372305781804967209428" ] }, "signature_type": "Line", "id": "CVE-2025-29769-adafd844", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "function": "sink_area_allocate_fn", "file": "libvips/iofuncs/sink.c" }, "deprecated": false, "digest": { "function_hash": "87901119015312691826201689114662279514", "length": 1239.0 }, "signature_type": "Function", "id": "CVE-2025-29769-b101c8ea", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "file": "libvips/foreign/nsgifload.c" }, "deprecated": false, "digest": { "threshold": 0.9, "line_hashes": [ "318626080935404777321996941007022724219", "126728542830347104328899979776212024271", "237572275032682885397696619724365302130", "185898092728466258361382489170615574696" ] }, "signature_type": "Line", "id": "CVE-2025-29769-bb5be849", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "function": "rtiff_decompress_jpeg_run", "file": "libvips/foreign/tiff2vips.c" }, "deprecated": false, "digest": { "function_hash": "205736318270045473948896703020627779753", "length": 1607.0 }, "signature_type": "Function", "id": "CVE-2025-29769-bb918ce3", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "file": "libvips/foreign/webpsave.c" }, "deprecated": false, "digest": { "threshold": 0.9, "line_hashes": [ "24875867738206083492760039906121135648", "105038057759592853591083683240054476714", "209573835184059481931656536947595802878", "11584784780552678659114232395508616292" ] }, "signature_type": "Line", "id": "CVE-2025-29769-be439bc7", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "file": "libvips/conversion/bandunfold.c" }, "deprecated": false, "digest": { "threshold": 0.9, "line_hashes": [ "318000631397884841997196568373679664561", "112131231652818112737136636747257954743", "188980767027441133412796215488847185327", "244411993317488070253681494387579941093" ] }, "signature_type": "Line", "id": "CVE-2025-29769-e58a0d91", "signature_version": "v1" }, { "source": "https://github.com/libvips/libvips/commit/82c7c05cb02a52750251bb4cc69d67f40568cf98", "target": { "function": "vips_foreign_save_jp2k_sizeof_tile", "file": "libvips/foreign/jp2ksave.c" }, "deprecated": false, "digest": { "function_hash": "208411974504325091436517522032930970505", "length": 450.0 }, "signature_type": "Function", "id": "CVE-2025-29769-e7045178", "signature_version": "v1" } ]