Hello community, here is the log from the commit of package transfig for openSUSE:Factory checked in at 2018-09-04 22:48:05 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/transfig (Old) and /work/SRC/openSUSE:Factory/.transfig.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "transfig" Tue Sep 4 22:48:05 2018 rev:39 rq:632307 version:3.2.7a Changes: -------- --- /work/SRC/openSUSE:Factory/transfig/transfig.changes 2018-05-08 13:38:04.587958196 +0200 +++ /work/SRC/openSUSE:Factory/.transfig.new/transfig.changes 2018-09-04 22:48:21.779395140 +0200 @@ -1,0 +2,6 @@ +Thu Aug 30 09:50:10 UTC 2018 - Dr. Werner Fink <wer...@suse.de> + +- Add patch transfig-e0c4b024.patch from upstream commit e0c4b024 + to fix bsc#1106531 with CVE-2018-16140 + +------------------------------------------------------------------- New: ---- transfig-e0c4b024.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ transfig.spec ++++++ --- /var/tmp/diff_new_pack.vMlYOa/_old 2018-09-04 22:48:22.451397452 +0200 +++ /var/tmp/diff_new_pack.vMlYOa/_new 2018-09-04 22:48:22.455397466 +0200 @@ -56,6 +56,7 @@ Patch2: transfig.3.2.5-binderman.dif Patch3: transfig.3.2.5d-mediaboxrealnb.dif Patch4: transfig-fix-afl.patch +Patch5: transfig-e0c4b024.patch Patch43: fig2dev-3.2.6-fig2mpdf.patch Patch44: fig2dev-3.2.6-fig2mpdf-doc.patch Patch45: fig2dev-3.2.6a-RGBFILE.patch @@ -100,6 +101,7 @@ %patch2 -p0 -b .bm %patch3 -p0 -b .mbox %patch4 -p1 -b .afl +%patch5 -p0 -b .e0c4b024 %patch43 -p2 -b .mpdf %patch44 -p1 -b .mpdfdoc %patch45 -p1 -b .p45 ++++++ transfig-e0c4b024.patch ++++++ Based on e0c4b02429116b15ad1568c2c425f06b95b95830 Mon Sep 17 00:00:00 2001 From: Thomas Loimer <thomas.loi...@tuwien.ac.at> Date: Sat, 25 Aug 2018 20:46:45 +0200 Subject: [PATCH] Harden input in read.c, fixes tickets #27 and #28 Also fixes issues similar to those described in https://sourceforge.net/p/mcj/tickets/27 and https://sourceforge.net/p/mcj/tickets/28. --- fig2dev/dev/readpcx.c | 2 - fig2dev/read.c | 48 +++++++++++++++++++++++++++++++++------------- fig2dev/tests/Makefile.am | 3 ++ fig2dev/tests/read.at | 44 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 82 insertions(+), 15 deletions(-) --- fig2dev/read.c +++ fig2dev/read.c 2018-08-30 09:47:35.317361612 +0000 @@ -188,12 +188,24 @@ read_objects(FILE *fp, F_compound *obj) int object, coord_sys, len; memset((char*)obj, '\0', COMOBJ_SIZE); + (void) fgets(buf, BUFSIZ, fp); /* get the version line */ + if (strncmp(buf, "#FIG ", 5)) { + put_msg("Incorrect format string in first line of input file."); + return -1; + } + + /* remove newline and any carriage return (from a PC, perhaps) */ len = strlen(buf); - if (len > 0) - buf[len-1] = '\0'; /* remove newline */ - if (len > 1 && buf[len-2] == '\r') - buf[len-2] = '\0'; /* and any CR (from a PC perhaps) */ + if (buf[len-1] == '\n') { + if (buf[len-2] == '\r') + buf[len-2] = '\0'; + else + buf[len-1] = '\0'; + } else { /* fgets() only stops at newline and end-of-file */ + put_msg("File is truncated at first line."); + return -1; + } /* v2_flag is for version 2 or higher */ v2_flag = (!strncmp(buf, "#FIG 2", 6) || !strncmp(buf, "#FIG 3", 6)); @@ -886,6 +898,8 @@ read_lineobject(FILE *fp) l->next = NULL; l->join_style = 0; l->cap_style = 0; /* butt line cap */ + l->pic = NULL; + l->comments = NULL; sscanf(buf,"%*d%d",&l->type); /* get the line type */ @@ -968,12 +982,18 @@ read_lineobject(FILE *fp) char file[BUFSIZ], *c; size_t len; - Pic_malloc(l->pic); - l->pic->transp = -1; - if (l->pic == NULL) { + if ((Pic_malloc(l->pic)) == NULL) { free(l); return NULL; } + l->pic->transp = -1; + l->pic->bitmap = NULL; +#ifdef HAVE_X11_XPM_H + /* initialize l->pic->xpmimage by (ab)using a + public libxpm-function */ + XpmCreateXpmImageFromBuffer("", &l->pic->xpmimage, NULL); +#endif + /* %[^\n]: really, read until first '\0' in buf */ if (get_line(fp) < 0 || sscanf(buf, "%d %[^\n]", &l->pic->flipped, file) != 2) { @@ -1000,8 +1020,7 @@ read_lineobject(FILE *fp) l->pic->file = malloc(len = strlen(file) + 1); memcpy(l->pic->file, file, len); } - } else - l->pic = NULL; + } if (NULL == (l->points = Point_malloc(p))) { put_msg(Err_mem); @@ -1082,6 +1101,7 @@ read_splineobject(FILE *fp) s->fill_style = 0; s->for_arrow = NULL; s->back_arrow = NULL; + s->comments = NULL; s->next = NULL; if (v30_flag) { @@ -1270,6 +1290,7 @@ read_textobject(FILE *fp) Text_malloc(t); t->font = 0; t->size = 0.0; + t->comments = NULL; t->next = NULL; if (v30_flag) { /* order of parms is more like other objects now, @@ -1464,11 +1485,12 @@ get_line(FILE *fp) if (*buf == '#') { /* save any comments */ if (save_comment() < 0) return -1; - } else if (*buf != '\n') { /* Skip empty lines */ + /* skip empty lines */ + } else if (*buf != '\n' || !(*buf == '\r' && buf[1] == '\n')) { len = strlen(buf); - buf[len-1] = '\0'; /* strip trailing newline */ - if (buf[len-2] == '\r') - buf[len-2] = '\0'; /* strip trailing CRs */ + /* remove newline and possibly a carriage return */ + if (buf[len-1] == '\n') + buf[len - (buf[len-2] == '\r' ? 2 : 1)] = '\0'; return 1; } } --- fig2dev/dev/readpcx.c +++ fig2dev/dev/readpcx.c 2018-08-30 09:47:35.305361829 +0000 @@ -96,8 +96,6 @@ _read_pcx(FILE *pcxfile, F_pic *pic) fprintf(tfp, "%% Begin Imported PCX File: %s\n\n", pic->file); pic->subtype = P_PCX; - pic->bitmap=NULL; - fread(&header,1,sizeof(struct pcxhed),pcxfile); if (header.manuf!=10 || header.encod!=1) return 0; |--- fig2dev/tests/Makefile.am |+++ fig2dev/tests/Makefile.am 2018-08-30 09:47:35.321361539 +0000 |@@ -40,6 +40,9 @@ $(srcdir)/package.m4: $(top_srcdir)/conf | } >'$(srcdir)/package.m4' | | check_PROGRAMS = test1 |+# test1 calls malloc(), may be replaced by a rpl_malloc() defined in malloc.o in |+# LIBOBJS by AC_FUNC_MALLOC in configure.ac |+test1_LDADD = $(LIBOBJS) | | # keep the definition below in sync with that in ../Makefile.am | AM_CPPFLAGS = -DRGB_FILE="\"$(pkgdatadir)/rgb.txt\"" |--- fig2dev/tests/read.at |+++ fig2dev/tests/read.at 2018-08-30 09:47:35.325361467 +0000 |@@ -208,6 +208,50 @@ EOF | ],1,ignore,ignore) | AT_CLEANUP | |+AT_SETUP([correctly free invalid spline, ticket #27]) |+AT_KEYWORDS([read.c]) |+AT_CHECK([fig2dev -L box <<EOF |+#FIG 2 |+1200 2 |+3 0 0 0 0 0 0 0 0. 0 1 |+0 |+EOF |+],1,ignore,[Incomplete spline object at line 3. |+]) |+AT_CLEANUP |+ |+AT_SETUP([allow last line without newline, ticket #28]) |+AT_KEYWORDS([read.c]) |+AT_CHECK([AS_ECHO_N(['#FIG 2 |+0']) | fig2dev -L box], |+1, ignore, [Incomplete resolution information at line 1. |+]) |+AT_CLEANUP |+ |+AT_SETUP([correctly free invalid line object]) |+AT_KEYWORDS([read.c]) |+AT_CHECK([fig2dev -L box <<EOF |+#FIG 2 |+1200 2 |+2 1 1 1 -1 50 0 0 0. 0 0 |+0 |+EOF |+], 1, ignore, [Incomplete line object at line 3. |+]) |+AT_CLEANUP |+ |+AT_SETUP([correctly free invalid line with picture]) |+AT_KEYWORDS([read.c]) |+AT_CHECK([fig2dev -L box <<EOF |+FIG_FILE_TOP |+2 5 0 1 0 -1 50 0 0 0. 0 0 0 0 0 5 |+0 img |+0 |+EOF |+], 1, ignore, [Incomplete line object at line 12. |+]) |+AT_CLEANUP |+ | AT_BANNER([Dynamically allocate picture file name.]) | | AT_SETUP([prepend fig file path to picture file name])