Bug#1139576: trixie-pu: package libxpm/1:3.5.17-1+deb13u1

Moritz Muehlenhoff <[email protected]> Tue, 09 Jun 2026 22:58:31 +0200
Newsgroups gmane.linux.debian.devel.x
Message-ID <178103871113.92231.10969878658802322247.reportbug__47013.8809106842$1781038897$gmane$org@soju.westfalen.local>
Package: release.debian.org
Severity: normal
Tags: trixie
X-Debbugs-Cc: [email protected], [email protected], [email protected]
Control: affects -1 + src:libxpm
User: [email protected]
Usertags: pu

This fixes a low severity security issue in libxpm. Tests via debusine
look all good and the fix has been in testing for over five weeks now.
debdiff below.

Cheers,
        Moritz

diff -u libxpm-3.5.17/debian/changelog libxpm-3.5.17/debian/changelog
--- libxpm-3.5.17/debian/changelog
+++ libxpm-3.5.17/debian/changelog
@@ -1,3 +1,9 @@
+libxpm (1:3.5.17-1+deb13u1) trixie; urgency=medium
+
+  * CVE-2026-4367 (Closes: #1134690)
+
+ -- Moritz Mühlenhoff <[email protected]>  Mon, 08 Jun 2026 22:27:18 +0200
+
 libxpm (1:3.5.17-1) unstable; urgency=high
 
   [ Timo Aaltonen ]
only in patch2:
unchanged:
--- libxpm-3.5.17.orig/src/data.c
+++ libxpm-3.5.17/src/data.c
@@ -210,6 +210,9 @@
 	    while ((c = *data->cptr++) && c != data->Bos && c != '\0')
 		if (data->Bcmt && c == data->Bcmt[0])
 		    ParseComment(data);
+
+	    if (c == '\0')
+		return XpmFileInvalid;
 	} else if (data->Bcmt) {	/* XPM2 natural */
 	    while (((c = *data->cptr++) == data->Bcmt[0]) && c != '\0')
 		ParseComment(data);
only in patch2:
unchanged:
--- libxpm-3.5.17.orig/src/parse.c
+++ libxpm-3.5.17/src/parse.c
@@ -221,7 +221,9 @@
 
     if (!data->format) {		/* XPM 2 or 3 */
 	for (a = 0, color = colorTable; a < ncolors; a++, color++) {
-	    xpmNextString(data);	/* skip the line */
+	    ErrorStatus = xpmNextString(data);         /* skip the line */
+	    if (ErrorStatus != XpmSuccess)
+		goto error;
 
 	    /*
 	     * read pixel value
@@ -319,7 +321,9 @@
 	/* get to the beginning of the first string */
 	data->Bos = '"';
 	data->Eos = '\0';
-	xpmNextString(data);
+	ErrorStatus = xpmNextString(data);
+	if (ErrorStatus != XpmSuccess)
+	    goto error;
 	data->Eos = '"';
 	for (a = 0, color = colorTable; a < ncolors; a++, color++) {
 
@@ -359,7 +363,9 @@
 	    /*
 	     * read color values
 	     */
-	    xpmNextString(data);	/* get to the next string */
+	    ErrorStatus = xpmNextString(data);	/* get to the next string */
+	    if (ErrorStatus != XpmSuccess)
+		goto error;
 	    *curbuf = '\0';		/* init curbuf */
 	    while ((l = xpmNextWord(data, buf, BUFSIZ))) {
 		if (*curbuf != '\0') {
@@ -383,8 +389,11 @@
 	    memcpy(s, curbuf, len);
 	    color->c_color = s;
 	    *curbuf = '\0';		/* reset curbuf */
-	    if (a < ncolors - 1)	/* can we trust ncolors -> leave data's bounds */
-		xpmNextString(data);	/* get to the next string */
+	    if (a < ncolors - 1) {	/* can we trust ncolors -> leave data's bounds */
+		ErrorStatus = xpmNextString(data);	/* get to the next string */
+		if (ErrorStatus != XpmSuccess)
+		    goto error;
+	    }
 	}
     }
     *colorTablePtr = colorTable;