Package: release.debian.org
Severity: normal
Tags: bullseye
User: release.debian....@packages.debian.org
Usertags: pu

I prepared an update for fig2dev 1:3.2.8-3 to deb11u1, which fixes
CVE-2021-37529 and CVE-2021-37530.

Additionally it fixes an annoying bug that breaks EPS import (this bug
was a typo with x and y).

Last I added a mechanism, that rebuilds the testsuite (used at build
time as well as in autopkgtest) to activate the tests that are added
by the above patches.

The salsa pipeline succeeded on this (except reprotest and crossbuild):
https://salsa.debian.org/debian/fig2dev/-/pipelines/415604

[ Risks ]
The patches are backported from upstream code and not too complex.
The CVE patches come with test cases, that check their correctness.
The eps import patch is trivial to check (only one char was wrong).

[ 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 (old)stable
  [x] the issue is verified as fixed in unstable

A diff against 3.2.8-3 (bullseye) is attached.

Greetings
Roland
diff --git a/debian/changelog b/debian/changelog
index 8954565..a1bcec3 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,13 @@
+fig2dev (1:3.2.8-3+deb11u1) bullseye; urgency=medium
+
+  * Rebuild testsuite during build and in autopkgtest.
+  * 34_epsimport: Stop misplacement of embedded eps images.
+  * Adapt salsa CI pipeline to bullseye release.
+  * 35_CVE-2021-37529: Allow long names for non-existing images.
+  * 36_CVE-2021-37530: Avoid a segfault for non-existing image names.
+
+ -- Roland Rosenfeld <rol...@debian.org>  Fri, 26 Aug 2022 12:30:59 +0200
+
 fig2dev (1:3.2.8-3) unstable; urgency=medium
 
   * 30_arrow-poly: Remove arrows from polygon with single point.
diff --git a/debian/patches/34_epsimport.patch b/debian/patches/34_epsimport.patch
new file mode 100644
index 0000000..84426b4
--- /dev/null
+++ b/debian/patches/34_epsimport.patch
@@ -0,0 +1,18 @@
+From: Thomas Loimer <thomas.loi...@tuwien.ac.at>
+Date: Tue, 28 Sep 2021 21:58:41 +0200
+Bug: https://sourceforge.net/p/mcj/tickets/137/
+Origin: https://sourceforge.net/p/mcj/fig2dev/ci/1b09a885a8f0309bf1170ddcf07673801c79f895/
+Applied-Upstream: commit:1b09a885a8f0309bf1170ddcf07673801c79f895
+Subject: [PATCH] Correct a typo causing incorrect eps import, #137
+
+--- a/fig2dev/dev/readeps.c
++++ b/fig2dev/dev/readeps.c
+@@ -345,7 +345,7 @@ read_eps(F_pic *pic, struct xfig_stream
+ 				}
+ 				*llx = floor(rllx);
+ 				*lly = floor(rlly);
+-				pic->bit_size.x = (int)(rurx - rlly);
++				pic->bit_size.x = (int)(rurx - rllx);
+ 				pic->bit_size.y = (int)(rury - rlly);
+ 				break;
+ 			}
diff --git a/debian/patches/35_CVE-2021-37529.patch b/debian/patches/35_CVE-2021-37529.patch
new file mode 100644
index 0000000..3e977f4
--- /dev/null
+++ b/debian/patches/35_CVE-2021-37529.patch
@@ -0,0 +1,68 @@
+From: Thomas Loimer <thomas.loi...@tuwien.ac.at>
+Date: Tue Jul 20 00:23:47 2021 +0200
+Bug: https://sourceforge.net/p/mcj/tickets/125/
+Origin: https://sourceforge.net/p/mcj/fig2dev/ci/899ea1277387ca9e9853bf61d29b7419d5692691
+Subject: Allow long names for non-existing images, #125
+ This fixes CVE-2021-37529
+    
+    On freeing the memory for the long file names, a double free() happened,
+    see ticket #125.
+    
+    In addition, do not allocate twice to the same pointer (*found), thus
+    leaking memory.
+
+--- a/fig2dev/dev/readpics.c
++++ b/fig2dev/dev/readpics.c
+@@ -55,13 +55,19 @@ free_stream(struct xfig_stream *restrict
+ 			err_msg("Cannot remove temporary file %s",
+ 					xf_stream->content);
+ 		}
+-		if (xf_stream->content != xf_stream->content_buf)
++		if (xf_stream->content != xf_stream->content_buf) {
+ 			free(xf_stream->content);
++			xf_stream->content = xf_stream->content_buf;
++		}
+ 	}
+-	if (xf_stream->name != xf_stream->name_buf)
++	if (xf_stream->name != xf_stream->name_buf) {
+ 		free(xf_stream->name);
+-	if (xf_stream->name_on_disk != xf_stream->name_on_disk_buf)
++		xf_stream->name = xf_stream->name_buf;
++	}
++	if (xf_stream->name_on_disk != xf_stream->name_on_disk_buf) {
+ 		free(xf_stream->name_on_disk);
++		xf_stream->name_on_disk = xf_stream->name_on_disk_buf;
++	}
+ }
+ 
+ /*
+@@ -124,8 +130,9 @@ file_on_disk(char *restrict name, char *
+ 	if (stat(name, &status)) {
+ 		/* File not found. Now try, whether a file with one of
+ 		   the known suffices appended exists. */
+-		if (len < name_len + FILEONDISK_ADD && (*found =
+-				malloc(name_len + FILEONDISK_ADD)) == NULL) {
++		if (len > name_len && len < name_len + FILEONDISK_ADD &&
++				(*found = malloc(name_len + FILEONDISK_ADD))
++				== NULL) {
+ 			put_msg(Err_mem);
+ 			return -1;
+ 		}
+--- a/fig2dev/tests/input.at
++++ b/fig2dev/tests/input.at
+@@ -137,4 +137,15 @@ AT_CHECK([$SED "11 s%line%$abs_srcdir/da
+ ],0,ignore)
+ AT_CLEANUP
+ 
++AT_SETUP([long image name, non-existing file, ticket #125])
++AT_KEYWORDS(readpics)
++AT_CHECK([fig2dev -Leps <<EOF
++FIG_FILE_TOP
++2 5 0 1 0 -1 50 -1 -1 0.0 0 0 -1 0 0 5
++	0 use a file name that does not exist and is at least 128 characters long - this triggered a bug whereupon the string buffer was freed two times
++	 0 0 100 0 100 60 0 60 0 0
++EOF
++],0,ignore,ignore)
++AT_CLEANUP
++
+ m4_undefine([NO_GZIP])
diff --git a/debian/patches/36_CVE-2021-37530.patch b/debian/patches/36_CVE-2021-37530.patch
new file mode 100644
index 0000000..960de31
--- /dev/null
+++ b/debian/patches/36_CVE-2021-37530.patch
@@ -0,0 +1,40 @@
+From: Thomas Loimer <thomas.loi...@tuwien.ac.at>
+Date: Tue Jul 20 00:36:12 2021 +0200
+Bug: https://sourceforge.net/p/mcj/tickets/126/
+Origin: https://sourceforge.net/p/mcj/fig2dev/ci/ff103511e49c44c83fc58e2092aa37e9019a3a9f/
+Subject: Avoid a segfault for non-existing image names, #126
+ This fixes CVE-2021-37530
+    
+    Before this commit, a name with a compression suffix, referring to a
+    non-existing image file, would cause a segfault.
+
+--- a/fig2dev/dev/readpics.c
++++ b/fig2dev/dev/readpics.c
+@@ -219,7 +219,7 @@ open_stream(char *restrict name, struct
+ 		return NULL;
+ 	}
+ 
+-	if (*xf_stream->uncompress) {
++	if (xf_stream->uncompress && *xf_stream->uncompress) {
+ 		/* a compressed file */
+ 		char	command_buf[256];
+ 		char	*command = command_buf;
+--- a/fig2dev/tests/input.at
++++ b/fig2dev/tests/input.at
+@@ -148,4 +148,16 @@ EOF
+ ],0,ignore,ignore)
+ AT_CLEANUP
+ 
++AT_SETUP([non-existing file with suffix (.Z), ticket #126])
++AT_KEYWORDS(readpics)
++AT_CHECK([fig2dev -Leps <<EOF
++FIG_FILE_TOP
++2 5 0 1 0 -1 50 -1 -1 0.0 0 0 -1 0 0 5
++	0 non-existing.Z
++	 0 0 100 0 100 60 0 60 0 0
++EOF
++],0,ignore,[No such picture file: non-existing.Z
++])
++AT_CLEANUP
++
+ m4_undefine([NO_GZIP])
diff --git a/debian/patches/series b/debian/patches/series
index 0ab760a..bb740cf 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -6,3 +6,6 @@
 31_trunc-subsuper.patch
 32_arrow-point.patch
 33_sanitize-color.patch
+34_epsimport.patch
+35_CVE-2021-37529.patch
+36_CVE-2021-37530.patch
diff --git a/debian/rules b/debian/rules
index 95f1756..6f1ddc1 100755
--- a/debian/rules
+++ b/debian/rules
@@ -29,7 +29,11 @@ override_dh_auto_build:
 #	preserve some files from upstream tarball:
 	tar cf debian/preserve.tar fig2dev/config.vc \
 		fig2dev/tests/data/fillswclip.svg \
-		fig2dev/tests/data/patterns.svg transfig/doc/manual.pdf
+		fig2dev/tests/data/patterns.svg transfig/doc/manual.pdf \
+		fig2dev/tests/testsuite
+
+# 	rebuild testsuite:
+	(cd fig2dev/tests; rm -f testsuite; make testsuite)
 
 	dh_auto_build
 
diff --git a/debian/salsa-ci.yml b/debian/salsa-ci.yml
index 892f3cd..4e57130 100644
--- a/debian/salsa-ci.yml
+++ b/debian/salsa-ci.yml
@@ -1,3 +1,6 @@
 include:
  - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/salsa-ci.yml
  - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/pipeline-jobs.yml
+
+variables:
+  RELEASE: 'bullseye'
diff --git a/debian/tests/fig2dev-testsuite b/debian/tests/fig2dev-testsuite
index 8998617..be31ef2 100755
--- a/debian/tests/fig2dev-testsuite
+++ b/debian/tests/fig2dev-testsuite
@@ -10,6 +10,11 @@ echo "Running dh_auto_configure"
 dh_auto_configure 2>&1
 
 cd fig2dev/tests
+
+echo "Rebuild testsuite"
+rm -f testsuite
+make testsuite
+
 echo "Building required test programs"
 make check 2>&1 || true
 

Attachment: signature.asc
Description: PGP signature

Reply via email to