Package: release.debian.org
Severity: normal
Tags: trixie
X-Debbugs-Cc: [email protected], [email protected]
Control: affects -1 + src:vips
User: [email protected]
Usertags: pu

Hi RMs,

[ Reason ]
There are eight security fixes in VIPS that don't warrant a DSA. As
it's an image processing library and tools, it may work with untrusted
images from some sources. Thus I would like to update this via PU
procedure.

[ Impact ]
Users will be safe from various malicious images that can exploit
their system. At least one issue has a public exploit available.

[ Tests ]
Build and some basic testing. This update was done by Moritz
Mühlenhoff from the Security Team and I've double checked. He also did
successful Debusine checking with this update.

[ Risks ]
Very small, all changes are only additional validity checking and
using the correct variable types in some places.

[ Checklist ]
[x] *all* changes are documented in the d/changelog
[x] I reviewed all changes and I approve them
[x] attach debdiff against the package in stable
[x] the issues are verified as fixed in unstable

Thanks,
Laszlo/GCS
diff -Nru vips-8.16.1/debian/changelog vips-8.16.1/debian/changelog
--- vips-8.16.1/debian/changelog	2025-03-15 16:12:33.000000000 +0100
+++ vips-8.16.1/debian/changelog	2026-04-06 14:18:12.000000000 +0200
@@ -1,3 +1,15 @@
+vips (8.16.1-1+deb13u1) trixie; urgency=medium
+
+  [ Moritz Mühlenhoff <[email protected]> ]
+  * CVE-2026-3283 CVE-2026-3284 (Closes: #1129310)
+  * CVE-2026-3282 (Closes: #1129311)
+  * CVE-2026-3281 (Closes: #1129312)
+  * CVE-2026-3147 (Closes: #1129314)
+  * CVE-2026-3145 CVE-2026-3146 (Closes: #1129315)
+  * CVE-2026-2913 (Closes: #1128785)
+
+ -- Laszlo Boszormenyi (GCS) <[email protected]>  Mon, 06 Apr 2026 14:18:12 +0200
+
 vips (8.16.1-1) unstable; urgency=medium
 
   * New upstream release.
diff -Nru vips-8.16.1/debian/patches/CVE-2026-2913.patch vips-8.16.1/debian/patches/CVE-2026-2913.patch
--- vips-8.16.1/debian/patches/CVE-2026-2913.patch	1970-01-01 01:00:00.000000000 +0100
+++ vips-8.16.1/debian/patches/CVE-2026-2913.patch	2026-04-06 00:24:53.000000000 +0200
@@ -0,0 +1,50 @@
+From a56feecbe9ed66521d9647ec9fbcd2546eccd7ee Mon Sep 17 00:00:00 2001
+From: Kleis Auke Wolthuizen <[email protected]>
+Date: Thu, 12 Feb 2026 10:38:55 +0100
+Subject: [PATCH] source: guard against length truncation (#4858)
+
+--- vips-8.16.1.orig/libvips/iofuncs/source.c
++++ vips-8.16.1/libvips/iofuncs/source.c
+@@ -912,6 +912,12 @@ vips_source_read_to_memory(VipsSource *s
+ 	g_assert(!source->header_bytes);
+ 	g_assert(source->length >= 0);
+ 
++	if (G_UNLIKELY(source->length > UINT_MAX)) {
++		vips_error(vips_connection_nick(VIPS_CONNECTION(source)),
++			"%s", _("length overflow"));
++		return -1;
++	}
++
+ 	if (vips_source_rewind(source))
+ 		return -1;
+ 
+@@ -919,7 +925,7 @@ vips_source_read_to_memory(VipsSource *s
+ 	 * directly to it.
+ 	 */
+ 	byte_array = g_byte_array_new();
+-	g_byte_array_set_size(byte_array, source->length);
++	g_byte_array_set_size(byte_array, (guint) source->length);
+ 
+ 	read_position = 0;
+ 	q = byte_array->data;
+@@ -1302,13 +1308,19 @@ vips_source_sniff_at_most(VipsSource *so
+ 
+ 	VIPS_DEBUG_MSG("vips_source_sniff_at_most: %zd bytes\n", length);
+ 
++	if (G_UNLIKELY(length > UINT_MAX)) {
++		vips_error(vips_connection_nick(VIPS_CONNECTION(source)),
++			"%s", _("length overflow"));
++		return -1;
++	}
++
+ 	SANITY(source);
+ 
+ 	if (vips_source_test_features(source) ||
+ 		vips_source_rewind(source))
+ 		return -1;
+ 
+-	g_byte_array_set_size(source->sniff, length);
++	g_byte_array_set_size(source->sniff, (guint) length);
+ 
+ 	read_position = 0;
+ 	q = source->sniff->data;
diff -Nru vips-8.16.1/debian/patches/CVE-2026-3145_CVE-2026-3146.patch vips-8.16.1/debian/patches/CVE-2026-3145_CVE-2026-3146.patch
--- vips-8.16.1/debian/patches/CVE-2026-3145_CVE-2026-3146.patch	1970-01-01 01:00:00.000000000 +0100
+++ vips-8.16.1/debian/patches/CVE-2026-3145_CVE-2026-3146.patch	2026-04-06 08:21:58.000000000 +0200
@@ -0,0 +1,28 @@
+From d4ce337c76bff1b278d7085c3c4f4725e3aa6ece Mon Sep 17 00:00:00 2001
+From: Lovell Fuller <[email protected]>
+Date: Thu, 19 Feb 2026 12:31:43 +0000
+Subject: [PATCH] matrixload: guard against empty and very large inputs (#4888)
+
+--- vips-8.16.1.orig/libvips/foreign/matrixload.c
++++ vips-8.16.1/libvips/foreign/matrixload.c
+@@ -186,7 +186,10 @@ vips_foreign_load_matrix_header(VipsFore
+ 	if (vips_source_rewind(matrix->source))
+ 		return -1;
+ 
+-	line = vips_sbuf_get_line_copy(matrix->sbuf);
++	if (!(line = vips_sbuf_get_line_copy(matrix->sbuf))) {
++		vips_error("mask2vips", "%s", _("invalid header"));
++		return -1;
++	}
+ 	result = parse_matrix_header(line, &width, &height, &scale, &offset);
+ 	g_free(line);
+ 	if (result)
+@@ -331,7 +334,7 @@ static gboolean
+ vips_foreign_load_matrix_file_is_a(const char *filename)
+ {
+ 	unsigned char line[80];
+-	guint64 bytes;
++	gint64 bytes;
+ 	int width;
+ 	int height;
+ 	double scale;
diff -Nru vips-8.16.1/debian/patches/CVE-2026-3147.patch vips-8.16.1/debian/patches/CVE-2026-3147.patch
--- vips-8.16.1/debian/patches/CVE-2026-3147.patch	1970-01-01 01:00:00.000000000 +0100
+++ vips-8.16.1/debian/patches/CVE-2026-3147.patch	2026-04-06 00:24:53.000000000 +0200
@@ -0,0 +1,21 @@
+From b3ab458a25e0e261cbd1788474bbc763f7435780 Mon Sep 17 00:00:00 2001
+From: Lovell Fuller <[email protected]>
+Date: Sat, 21 Feb 2026 19:00:31 +0000
+Subject: [PATCH] csvload: check whitespace and separator are ASCII (#4894)
+
+--- vips-8.16.1.orig/libvips/foreign/csvload.c
++++ vips-8.16.1/libvips/foreign/csvload.c
+@@ -121,6 +121,13 @@ vips_foreign_load_csv_build(VipsObject *
+ 	int i;
+ 	const char *p;
+ 
++	if (!g_str_is_ascii(csv->whitespace) ||
++		!g_str_is_ascii(csv->separator)) {
++		vips_error("csvload", "%s",
++			_("whitespace and separator must be ASCII"));
++		return -1;
++	}
++
+ 	if (!(csv->sbuf = vips_sbuf_new_from_source(csv->source)))
+ 		return -1;
+ 
diff -Nru vips-8.16.1/debian/patches/CVE-2026-3281.patch vips-8.16.1/debian/patches/CVE-2026-3281.patch
--- vips-8.16.1/debian/patches/CVE-2026-3281.patch	1970-01-01 01:00:00.000000000 +0100
+++ vips-8.16.1/debian/patches/CVE-2026-3281.patch	2026-04-06 00:24:53.000000000 +0200
@@ -0,0 +1,18 @@
+From fd28c5463697712cb0ab116a2c55e4f4d92c4088 Mon Sep 17 00:00:00 2001
+From: Lovell Fuller <[email protected]>
+Date: Sun, 22 Feb 2026 09:39:05 +0000
+Subject: [PATCH] bandrank: check index is in range #4878 (#4895)
+
+--- vips-8.16.1.orig/libvips/conversion/bandrank.c
++++ vips-8.16.1/libvips/conversion/bandrank.c
+@@ -224,6 +224,10 @@ vips_bandrank_build(VipsObject *object)
+ 
+ 		if (bandrank->index == -1)
+ 			bandrank->index = bandary->n / 2;
++		else if (bandrank->index >= bandary->n) {
++			vips_error(class->nickname, _("index out of range"));
++			return -1;
++		}
+ 	}
+ 
+ 	if (VIPS_OBJECT_CLASS(vips_bandrank_parent_class)->build(object))
diff -Nru vips-8.16.1/debian/patches/CVE-2026-3282.patch vips-8.16.1/debian/patches/CVE-2026-3282.patch
--- vips-8.16.1/debian/patches/CVE-2026-3282.patch	1970-01-01 01:00:00.000000000 +0100
+++ vips-8.16.1/debian/patches/CVE-2026-3282.patch	2026-04-06 00:24:53.000000000 +0200
@@ -0,0 +1,18 @@
+From 7215ead1e0cd7d3703cc4f5fca06d7d0f4c22b91 Mon Sep 17 00:00:00 2001
+From: Lovell Fuller <[email protected]>
+Date: Thu, 19 Feb 2026 13:50:37 +0000
+Subject: [PATCH] unpremultiply: check alpha_band is in range #4881 (#4886)
+
+--- vips-8.16.1.orig/libvips/conversion/unpremultiply.c
++++ vips-8.16.1/libvips/conversion/unpremultiply.c
+@@ -287,6 +287,10 @@ vips_unpremultiply_build(VipsObject *obj
+ 	 */
+ 	if (!vips_object_argument_isset(object, "alpha_band"))
+ 		unpremultiply->alpha_band = in->Bands - 1;
++	else if (unpremultiply->alpha_band >= in->Bands) {
++		vips_error(class->nickname, "%s", _("alpha_band out of range"));
++		return -1;
++	}
+ 
+ 	if (in->BandFmt == VIPS_FORMAT_DOUBLE)
+ 		conversion->out->BandFmt = VIPS_FORMAT_DOUBLE;
diff -Nru vips-8.16.1/debian/patches/CVE-2026-3283_CVE-2026-3284.patch vips-8.16.1/debian/patches/CVE-2026-3283_CVE-2026-3284.patch
--- vips-8.16.1/debian/patches/CVE-2026-3283_CVE-2026-3284.patch	1970-01-01 01:00:00.000000000 +0100
+++ vips-8.16.1/debian/patches/CVE-2026-3283_CVE-2026-3284.patch	2026-04-06 00:24:53.000000000 +0200
@@ -0,0 +1,28 @@
+From 24795bb3d19d84f7b6f5ed86451ad556c8f2fe70 Mon Sep 17 00:00:00 2001
+From: Lovell Fuller <[email protected]>
+Date: Thu, 19 Feb 2026 08:39:31 +0000
+Subject: [PATCH] extract: check bounds using unsigned arith #4879 #4880
+ (#4887)
+
+--- vips-8.16.1.orig/libvips/conversion/extract.c
++++ vips-8.16.1/libvips/conversion/extract.c
+@@ -143,8 +143,8 @@ vips_extract_area_build(VipsObject *obje
+ 	if (VIPS_OBJECT_CLASS(vips_extract_area_parent_class)->build(object))
+ 		return -1;
+ 
+-	if (extract->left + extract->width > extract->in->Xsize ||
+-		extract->top + extract->height > extract->in->Ysize ||
++	if ((guint64) extract->left + extract->width > extract->in->Xsize ||
++		(guint64) extract->top + extract->height > extract->in->Ysize ||
+ 		extract->left < 0 || extract->top < 0 ||
+ 		extract->width <= 0 || extract->height <= 0) {
+ 		vips_error(class->nickname, "%s", _("bad extract area"));
+@@ -393,7 +393,7 @@ vips_extract_band_build(VipsObject *obje
+ 		bandary->in = &extract->in;
+ 		bandary->out_bands = extract->n;
+ 
+-		if (extract->band + extract->n > bands) {
++		if ((guint64) extract->band + extract->n > bands) {
+ 			vips_error(class->nickname,
+ 				"%s", _("bad extract band"));
+ 			return -1;
diff -Nru vips-8.16.1/debian/patches/series vips-8.16.1/debian/patches/series
--- vips-8.16.1/debian/patches/series	1970-01-01 01:00:00.000000000 +0100
+++ vips-8.16.1/debian/patches/series	2026-04-06 08:22:03.000000000 +0200
@@ -0,0 +1,6 @@
+CVE-2026-3283_CVE-2026-3284.patch
+CVE-2026-3282.patch
+CVE-2026-3281.patch
+CVE-2026-3147.patch
+CVE-2026-3145_CVE-2026-3146.patch
+CVE-2026-2913.patch

Reply via email to