diff --git a/component/jasper/CVE-2011-4516-and-CVE-2011-4517.patch b/component/jasper/CVE-2011-4516-and-CVE-2011-4517.patch
deleted file mode 100644
index 774a06274e304e78658f5de69022787435c9dfc2..0000000000000000000000000000000000000000
--- a/component/jasper/CVE-2011-4516-and-CVE-2011-4517.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-Description: Fix for CVE-2011-4516 and CVE-2011-4517
- This patch fixes a possible denial of service and code execution via
- heap-based buffer overflows.
-Author: Michael Gilbert <michael.s.gilbert@gmail.com>
-Origin: Patch thanks to Red Hat
-Bug-Debian: http://bugs.debian.org/652649
-
-Index: jasper-1.900.1/src/libjasper/jpc/jpc_cs.c
-===================================================================
---- jasper-1.900.1.orig/src/libjasper/jpc/jpc_cs.c	2011-12-19 09:35:34.186909298 -0500
-+++ jasper-1.900.1/src/libjasper/jpc/jpc_cs.c	2011-12-19 09:35:51.198909832 -0500
-@@ -744,6 +744,10 @@
- 		return -1;
- 	}
- 	compparms->numrlvls = compparms->numdlvls + 1;
-+	if (compparms->numrlvls > JPC_MAXRLVLS) {
-+		jpc_cox_destroycompparms(compparms);
-+		return -1;
-+	}
- 	if (prtflag) {
- 		for (i = 0; i < compparms->numrlvls; ++i) {
- 			if (jpc_getuint8(in, &tmp)) {
-@@ -1331,7 +1335,7 @@
- 	jpc_crgcomp_t *comp;
- 	uint_fast16_t compno;
- 	crg->numcomps = cstate->numcomps;
--	if (!(crg->comps = jas_alloc2(cstate->numcomps, sizeof(uint_fast16_t)))) {
-+	if (!(crg->comps = jas_alloc2(cstate->numcomps, sizeof(jpc_crgcomp_t)))) {
- 		return -1;
- 	}
- 	for (compno = 0, comp = crg->comps; compno < cstate->numcomps;
diff --git a/component/jasper/CVE-2014-8137.patch b/component/jasper/CVE-2014-8137.patch
deleted file mode 100644
index 4822a4ee100e4a3e98e40c3328017d03f1c8b250..0000000000000000000000000000000000000000
--- a/component/jasper/CVE-2014-8137.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-Description: CVE-2014-8137: double-free in in jas_iccattrval_destroy()
-Origin: vendor, https://bugzilla.redhat.com/attachment.cgi?id=967283,
- https://bugzilla.redhat.com/attachment.cgi?id=967284
-Bug-Debian: https://bugs.debian.org/773463
-Bug-RedHat: https://bugzilla.redhat.com/show_bug.cgi?id=1173157
-Forwarded: no
-Author: Tomas Hoger <thoger@redhat.com>
-Last-Update: 2014-12-20
-
---- a/src/libjasper/base/jas_icc.c
-+++ b/src/libjasper/base/jas_icc.c
-@@ -1010,7 +1010,6 @@ static int jas_icccurv_input(jas_iccattr
- 	return 0;
- 
- error:
--	jas_icccurv_destroy(attrval);
- 	return -1;
- }
- 
-@@ -1128,7 +1127,6 @@ static int jas_icctxtdesc_input(jas_icca
- #endif
- 	return 0;
- error:
--	jas_icctxtdesc_destroy(attrval);
- 	return -1;
- }
- 
-@@ -1207,8 +1205,6 @@ static int jas_icctxt_input(jas_iccattrv
- 		goto error;
- 	return 0;
- error:
--	if (txt->string)
--		jas_free(txt->string);
- 	return -1;
- }
- 
-@@ -1329,7 +1325,6 @@ static int jas_icclut8_input(jas_iccattr
- 		goto error;
- 	return 0;
- error:
--	jas_icclut8_destroy(attrval);
- 	return -1;
- }
- 
-@@ -1498,7 +1493,6 @@ static int jas_icclut16_input(jas_iccatt
- 		goto error;
- 	return 0;
- error:
--	jas_icclut16_destroy(attrval);
- 	return -1;
- }
- 
---- a/src/libjasper/jp2/jp2_dec.c
-+++ b/src/libjasper/jp2/jp2_dec.c
-@@ -291,7 +291,10 @@ jas_image_t *jp2_decode(jas_stream_t *in
- 	case JP2_COLR_ICC:
- 		iccprof = jas_iccprof_createfrombuf(dec->colr->data.colr.iccp,
- 		  dec->colr->data.colr.iccplen);
--		assert(iccprof);
-+		if (!iccprof) {
-+			jas_eprintf("error: failed to parse ICC profile\n");
-+			goto error;
-+		}
- 		jas_iccprof_gethdr(iccprof, &icchdr);
- 		jas_eprintf("ICC Profile CS %08x\n", icchdr.colorspc);
- 		jas_image_setclrspc(dec->image, fromiccpcs(icchdr.colorspc));
diff --git a/component/jasper/CVE-2014-8138.patch b/component/jasper/CVE-2014-8138.patch
deleted file mode 100644
index 8223c4567a5b8ef10759f962967d500b01d68cd0..0000000000000000000000000000000000000000
--- a/component/jasper/CVE-2014-8138.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-Description: CVE-2014-8138: heap overflow in jp2_decode()
-Origin: vendor, https://bugzilla.redhat.com/attachment.cgi?id=967280
-Bug-Debian: https://bugs.debian.org/773463
-Bug-RedHat: https://bugzilla.redhat.com/show_bug.cgi?id=1173162
-Forwarded: no
-Author: Tomas Hoger <thoger@redhat.com>
-Last-Update: 2014-12-20
-
---- a/src/libjasper/jp2/jp2_dec.c
-+++ b/src/libjasper/jp2/jp2_dec.c
-@@ -389,6 +389,11 @@ jas_image_t *jp2_decode(jas_stream_t *in
- 	/* Determine the type of each component. */
- 	if (dec->cdef) {
- 		for (i = 0; i < dec->numchans; ++i) {
-+			/* Is the channel number reasonable? */
-+			if (dec->cdef->data.cdef.ents[i].channo >= dec->numchans) {
-+				jas_eprintf("error: invalid channel number in CDEF box\n");
-+				goto error;
-+			}
- 			jas_image_setcmpttype(dec->image,
- 			  dec->chantocmptlut[dec->cdef->data.cdef.ents[i].channo],
- 			  jp2_getct(jas_image_clrspc(dec->image),
diff --git a/component/jasper/CVE-2014-8157.patch b/component/jasper/CVE-2014-8157.patch
deleted file mode 100644
index a083e6ce64a31aa4d8cf1b4e41ed46f89a5bf2a7..0000000000000000000000000000000000000000
--- a/component/jasper/CVE-2014-8157.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Description: CVE-2014-8157: dec->numtiles off-by-one check in jpc_dec_process_sot()
-Origin: vendor, http://pkgs.fedoraproject.org/cgit/jasper.git/tree/jasper-CVE-2014-8157.patch
-Bug-RedHat: https://bugzilla.redhat.com/show_bug.cgi?id=1179282
-Bug-Debian: https://bugs.debian.org/775970
-Forwarded: not-needed
-Author: Salvatore Bonaccorso <carnil@debian.org>
-Last-Update: 2015-01-22
-
---- a/src/libjasper/jpc/jpc_dec.c
-+++ b/src/libjasper/jpc/jpc_dec.c
-@@ -489,7 +489,7 @@ static int jpc_dec_process_sot(jpc_dec_t
- 		dec->curtileendoff = 0;
- 	}
- 
--	if (JAS_CAST(int, sot->tileno) > dec->numtiles) {
-+	if (JAS_CAST(int, sot->tileno) >= dec->numtiles) {
- 		jas_eprintf("invalid tile number in SOT marker segment\n");
- 		return -1;
- 	}
diff --git a/component/jasper/CVE-2014-8158.patch b/component/jasper/CVE-2014-8158.patch
deleted file mode 100644
index af0f340bf1a97b9af8d88253e94d07cfca07f410..0000000000000000000000000000000000000000
--- a/component/jasper/CVE-2014-8158.patch
+++ /dev/null
@@ -1,336 +0,0 @@
-Description: CVE-2014-8158: unrestricted stack memory use in jpc_qmfb.c
-Origin: vendor, http://pkgs.fedoraproject.org/cgit/jasper.git/tree/jasper-CVE-2014-8158.patch
-Bug-RedHat: https://bugzilla.redhat.com/show_bug.cgi?id=1179298
-Bug-Debian: https://bugs.debian.org/775970
-Forwarded: not-needed
-Author: Salvatore Bonaccorso <carnil@debian.org>
-Last-Update: 2015-01-22
-
---- a/src/libjasper/jpc/jpc_qmfb.c
-+++ b/src/libjasper/jpc/jpc_qmfb.c
-@@ -306,11 +306,7 @@ void jpc_qmfb_split_row(jpc_fix_t *a, in
- {
- 
- 	int bufsize = JPC_CEILDIVPOW2(numcols, 1);
--#if !defined(HAVE_VLA)
- 	jpc_fix_t splitbuf[QMFB_SPLITBUFSIZE];
--#else
--	jpc_fix_t splitbuf[bufsize];
--#endif
- 	jpc_fix_t *buf = splitbuf;
- 	register jpc_fix_t *srcptr;
- 	register jpc_fix_t *dstptr;
-@@ -318,7 +314,6 @@ void jpc_qmfb_split_row(jpc_fix_t *a, in
- 	register int m;
- 	int hstartcol;
- 
--#if !defined(HAVE_VLA)
- 	/* Get a buffer. */
- 	if (bufsize > QMFB_SPLITBUFSIZE) {
- 		if (!(buf = jas_alloc2(bufsize, sizeof(jpc_fix_t)))) {
-@@ -326,7 +321,6 @@ void jpc_qmfb_split_row(jpc_fix_t *a, in
- 			abort();
- 		}
- 	}
--#endif
- 
- 	if (numcols >= 2) {
- 		hstartcol = (numcols + 1 - parity) >> 1;
-@@ -360,12 +354,10 @@ void jpc_qmfb_split_row(jpc_fix_t *a, in
- 		}
- 	}
- 
--#if !defined(HAVE_VLA)
- 	/* If the split buffer was allocated on the heap, free this memory. */
- 	if (buf != splitbuf) {
- 		jas_free(buf);
- 	}
--#endif
- 
- }
- 
-@@ -374,11 +366,7 @@ void jpc_qmfb_split_col(jpc_fix_t *a, in
- {
- 
- 	int bufsize = JPC_CEILDIVPOW2(numrows, 1);
--#if !defined(HAVE_VLA)
- 	jpc_fix_t splitbuf[QMFB_SPLITBUFSIZE];
--#else
--	jpc_fix_t splitbuf[bufsize];
--#endif
- 	jpc_fix_t *buf = splitbuf;
- 	register jpc_fix_t *srcptr;
- 	register jpc_fix_t *dstptr;
-@@ -386,7 +374,6 @@ void jpc_qmfb_split_col(jpc_fix_t *a, in
- 	register int m;
- 	int hstartcol;
- 
--#if !defined(HAVE_VLA)
- 	/* Get a buffer. */
- 	if (bufsize > QMFB_SPLITBUFSIZE) {
- 		if (!(buf = jas_alloc2(bufsize, sizeof(jpc_fix_t)))) {
-@@ -394,7 +381,6 @@ void jpc_qmfb_split_col(jpc_fix_t *a, in
- 			abort();
- 		}
- 	}
--#endif
- 
- 	if (numrows >= 2) {
- 		hstartcol = (numrows + 1 - parity) >> 1;
-@@ -428,12 +414,10 @@ void jpc_qmfb_split_col(jpc_fix_t *a, in
- 		}
- 	}
- 
--#if !defined(HAVE_VLA)
- 	/* If the split buffer was allocated on the heap, free this memory. */
- 	if (buf != splitbuf) {
- 		jas_free(buf);
- 	}
--#endif
- 
- }
- 
-@@ -442,11 +426,7 @@ void jpc_qmfb_split_colgrp(jpc_fix_t *a,
- {
- 
- 	int bufsize = JPC_CEILDIVPOW2(numrows, 1);
--#if !defined(HAVE_VLA)
- 	jpc_fix_t splitbuf[QMFB_SPLITBUFSIZE * JPC_QMFB_COLGRPSIZE];
--#else
--	jpc_fix_t splitbuf[bufsize * JPC_QMFB_COLGRPSIZE];
--#endif
- 	jpc_fix_t *buf = splitbuf;
- 	jpc_fix_t *srcptr;
- 	jpc_fix_t *dstptr;
-@@ -457,7 +437,6 @@ void jpc_qmfb_split_colgrp(jpc_fix_t *a,
- 	int m;
- 	int hstartcol;
- 
--#if !defined(HAVE_VLA)
- 	/* Get a buffer. */
- 	if (bufsize > QMFB_SPLITBUFSIZE) {
- 		if (!(buf = jas_alloc2(bufsize, sizeof(jpc_fix_t)))) {
-@@ -465,7 +444,6 @@ void jpc_qmfb_split_colgrp(jpc_fix_t *a,
- 			abort();
- 		}
- 	}
--#endif
- 
- 	if (numrows >= 2) {
- 		hstartcol = (numrows + 1 - parity) >> 1;
-@@ -517,12 +495,10 @@ void jpc_qmfb_split_colgrp(jpc_fix_t *a,
- 		}
- 	}
- 
--#if !defined(HAVE_VLA)
- 	/* If the split buffer was allocated on the heap, free this memory. */
- 	if (buf != splitbuf) {
- 		jas_free(buf);
- 	}
--#endif
- 
- }
- 
-@@ -531,11 +507,7 @@ void jpc_qmfb_split_colres(jpc_fix_t *a,
- {
- 
- 	int bufsize = JPC_CEILDIVPOW2(numrows, 1);
--#if !defined(HAVE_VLA)
- 	jpc_fix_t splitbuf[QMFB_SPLITBUFSIZE * JPC_QMFB_COLGRPSIZE];
--#else
--	jpc_fix_t splitbuf[bufsize * numcols];
--#endif
- 	jpc_fix_t *buf = splitbuf;
- 	jpc_fix_t *srcptr;
- 	jpc_fix_t *dstptr;
-@@ -546,7 +518,6 @@ void jpc_qmfb_split_colres(jpc_fix_t *a,
- 	int m;
- 	int hstartcol;
- 
--#if !defined(HAVE_VLA)
- 	/* Get a buffer. */
- 	if (bufsize > QMFB_SPLITBUFSIZE) {
- 		if (!(buf = jas_alloc2(bufsize, sizeof(jpc_fix_t)))) {
-@@ -554,7 +525,6 @@ void jpc_qmfb_split_colres(jpc_fix_t *a,
- 			abort();
- 		}
- 	}
--#endif
- 
- 	if (numrows >= 2) {
- 		hstartcol = (numrows + 1 - parity) >> 1;
-@@ -606,12 +576,10 @@ void jpc_qmfb_split_colres(jpc_fix_t *a,
- 		}
- 	}
- 
--#if !defined(HAVE_VLA)
- 	/* If the split buffer was allocated on the heap, free this memory. */
- 	if (buf != splitbuf) {
- 		jas_free(buf);
- 	}
--#endif
- 
- }
- 
-@@ -619,18 +587,13 @@ void jpc_qmfb_join_row(jpc_fix_t *a, int
- {
- 
- 	int bufsize = JPC_CEILDIVPOW2(numcols, 1);
--#if !defined(HAVE_VLA)
- 	jpc_fix_t joinbuf[QMFB_JOINBUFSIZE];
--#else
--	jpc_fix_t joinbuf[bufsize];
--#endif
- 	jpc_fix_t *buf = joinbuf;
- 	register jpc_fix_t *srcptr;
- 	register jpc_fix_t *dstptr;
- 	register int n;
- 	int hstartcol;
- 
--#if !defined(HAVE_VLA)
- 	/* Allocate memory for the join buffer from the heap. */
- 	if (bufsize > QMFB_JOINBUFSIZE) {
- 		if (!(buf = jas_alloc2(bufsize, sizeof(jpc_fix_t)))) {
-@@ -638,7 +601,6 @@ void jpc_qmfb_join_row(jpc_fix_t *a, int
- 			abort();
- 		}
- 	}
--#endif
- 
- 	hstartcol = (numcols + 1 - parity) >> 1;
- 
-@@ -670,12 +632,10 @@ void jpc_qmfb_join_row(jpc_fix_t *a, int
- 		++srcptr;
- 	}
- 
--#if !defined(HAVE_VLA)
- 	/* If the join buffer was allocated on the heap, free this memory. */
- 	if (buf != joinbuf) {
- 		jas_free(buf);
- 	}
--#endif
- 
- }
- 
-@@ -684,18 +644,13 @@ void jpc_qmfb_join_col(jpc_fix_t *a, int
- {
- 
- 	int bufsize = JPC_CEILDIVPOW2(numrows, 1);
--#if !defined(HAVE_VLA)
- 	jpc_fix_t joinbuf[QMFB_JOINBUFSIZE];
--#else
--	jpc_fix_t joinbuf[bufsize];
--#endif
- 	jpc_fix_t *buf = joinbuf;
- 	register jpc_fix_t *srcptr;
- 	register jpc_fix_t *dstptr;
- 	register int n;
- 	int hstartcol;
- 
--#if !defined(HAVE_VLA)
- 	/* Allocate memory for the join buffer from the heap. */
- 	if (bufsize > QMFB_JOINBUFSIZE) {
- 		if (!(buf = jas_alloc2(bufsize, sizeof(jpc_fix_t)))) {
-@@ -703,7 +658,6 @@ void jpc_qmfb_join_col(jpc_fix_t *a, int
- 			abort();
- 		}
- 	}
--#endif
- 
- 	hstartcol = (numrows + 1 - parity) >> 1;
- 
-@@ -735,12 +689,10 @@ void jpc_qmfb_join_col(jpc_fix_t *a, int
- 		++srcptr;
- 	}
- 
--#if !defined(HAVE_VLA)
- 	/* If the join buffer was allocated on the heap, free this memory. */
- 	if (buf != joinbuf) {
- 		jas_free(buf);
- 	}
--#endif
- 
- }
- 
-@@ -749,11 +701,7 @@ void jpc_qmfb_join_colgrp(jpc_fix_t *a,
- {
- 
- 	int bufsize = JPC_CEILDIVPOW2(numrows, 1);
--#if !defined(HAVE_VLA)
- 	jpc_fix_t joinbuf[QMFB_JOINBUFSIZE * JPC_QMFB_COLGRPSIZE];
--#else
--	jpc_fix_t joinbuf[bufsize * JPC_QMFB_COLGRPSIZE];
--#endif
- 	jpc_fix_t *buf = joinbuf;
- 	jpc_fix_t *srcptr;
- 	jpc_fix_t *dstptr;
-@@ -763,7 +711,6 @@ void jpc_qmfb_join_colgrp(jpc_fix_t *a,
- 	register int i;
- 	int hstartcol;
- 
--#if !defined(HAVE_VLA)
- 	/* Allocate memory for the join buffer from the heap. */
- 	if (bufsize > QMFB_JOINBUFSIZE) {
- 		if (!(buf = jas_alloc2(bufsize, JPC_QMFB_COLGRPSIZE * sizeof(jpc_fix_t)))) {
-@@ -771,7 +718,6 @@ void jpc_qmfb_join_colgrp(jpc_fix_t *a,
- 			abort();
- 		}
- 	}
--#endif
- 
- 	hstartcol = (numrows + 1 - parity) >> 1;
- 
-@@ -821,12 +767,10 @@ void jpc_qmfb_join_colgrp(jpc_fix_t *a,
- 		srcptr += JPC_QMFB_COLGRPSIZE;
- 	}
- 
--#if !defined(HAVE_VLA)
- 	/* If the join buffer was allocated on the heap, free this memory. */
- 	if (buf != joinbuf) {
- 		jas_free(buf);
- 	}
--#endif
- 
- }
- 
-@@ -835,11 +779,7 @@ void jpc_qmfb_join_colres(jpc_fix_t *a,
- {
- 
- 	int bufsize = JPC_CEILDIVPOW2(numrows, 1);
--#if !defined(HAVE_VLA)
- 	jpc_fix_t joinbuf[QMFB_JOINBUFSIZE * JPC_QMFB_COLGRPSIZE];
--#else
--	jpc_fix_t joinbuf[bufsize * numcols];
--#endif
- 	jpc_fix_t *buf = joinbuf;
- 	jpc_fix_t *srcptr;
- 	jpc_fix_t *dstptr;
-@@ -849,7 +789,6 @@ void jpc_qmfb_join_colres(jpc_fix_t *a,
- 	register int i;
- 	int hstartcol;
- 
--#if !defined(HAVE_VLA)
- 	/* Allocate memory for the join buffer from the heap. */
- 	if (bufsize > QMFB_JOINBUFSIZE) {
- 		if (!(buf = jas_alloc3(bufsize, numcols, sizeof(jpc_fix_t)))) {
-@@ -857,7 +796,6 @@ void jpc_qmfb_join_colres(jpc_fix_t *a,
- 			abort();
- 		}
- 	}
--#endif
- 
- 	hstartcol = (numrows + 1 - parity) >> 1;
- 
-@@ -907,12 +845,10 @@ void jpc_qmfb_join_colres(jpc_fix_t *a,
- 		srcptr += numcols;
- 	}
- 
--#if !defined(HAVE_VLA)
- 	/* If the join buffer was allocated on the heap, free this memory. */
- 	if (buf != joinbuf) {
- 		jas_free(buf);
- 	}
--#endif
- 
- }
- 
diff --git a/component/jasper/CVE-2014-9029.patch b/component/jasper/CVE-2014-9029.patch
deleted file mode 100644
index 80adb0d0bc3e8ee7db589c4178541e67e1fec57c..0000000000000000000000000000000000000000
--- a/component/jasper/CVE-2014-9029.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-Description: CVE-2014-9029: Heap overflows in libjasper
-Origin: vendor
-Forwarded: no
-Author: Tomas Hoger <thoger@redhat.com>
-Reviewed-by: Salvatore Bonaccorso <carnil@debian.org>
-Last-Update: 2014-11-28
-
---- a/src/libjasper/jpc/jpc_dec.c
-+++ b/src/libjasper/jpc/jpc_dec.c
-@@ -1280,7 +1280,7 @@ static int jpc_dec_process_coc(jpc_dec_t
- 	jpc_coc_t *coc = &ms->parms.coc;
- 	jpc_dec_tile_t *tile;
- 
--	if (JAS_CAST(int, coc->compno) > dec->numcomps) {
-+	if (JAS_CAST(int, coc->compno) >= dec->numcomps) {
- 		jas_eprintf("invalid component number in COC marker segment\n");
- 		return -1;
- 	}
-@@ -1306,7 +1306,7 @@ static int jpc_dec_process_rgn(jpc_dec_t
- 	jpc_rgn_t *rgn = &ms->parms.rgn;
- 	jpc_dec_tile_t *tile;
- 
--	if (JAS_CAST(int, rgn->compno) > dec->numcomps) {
-+	if (JAS_CAST(int, rgn->compno) >= dec->numcomps) {
- 		jas_eprintf("invalid component number in RGN marker segment\n");
- 		return -1;
- 	}
-@@ -1355,7 +1355,7 @@ static int jpc_dec_process_qcc(jpc_dec_t
- 	jpc_qcc_t *qcc = &ms->parms.qcc;
- 	jpc_dec_tile_t *tile;
- 
--	if (JAS_CAST(int, qcc->compno) > dec->numcomps) {
-+	if (JAS_CAST(int, qcc->compno) >= dec->numcomps) {
- 		jas_eprintf("invalid component number in QCC marker segment\n");
- 		return -1;
- 	}
diff --git a/component/jasper/CVE-2016-1577.patch b/component/jasper/CVE-2016-1577.patch
deleted file mode 100644
index 75bbd526afb866c499ca56de11f1abd0d4467289..0000000000000000000000000000000000000000
--- a/component/jasper/CVE-2016-1577.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Description: CVE-2016-1577: Prevent double-free in jas_iccattrval_destroy()
-Origin: vendor, http://www.openwall.com/lists/oss-security/2016/03/03/12
-Bug-Ubuntu: https://launchpad.net/bugs/1547865
-Bug-Debian: https://bugs.debian.org/816625
-Forwarded: not-needed
-Author: Tyler Hicks <tyhicks@canonical.com>
-Reviewed-by: Salvatore Bonaccorso <carnil@debian.org>
-Last-Update: 2016-03-05
-
---- a/src/libjasper/base/jas_icc.c
-+++ b/src/libjasper/base/jas_icc.c
-@@ -300,6 +300,7 @@ jas_iccprof_t *jas_iccprof_load(jas_stre
- 				if (jas_iccprof_setattr(prof, tagtabent->tag, attrval))
- 					goto error;
- 				jas_iccattrval_destroy(attrval);
-+				attrval = 0;
- 			} else {
- #if 0
- 				jas_eprintf("warning: skipping unknown tag type\n");
diff --git a/component/jasper/CVE-2016-1867_CVE-2016-8654_CVE-2016-8691_CVE-2016-8692_CVE-2016-8693_CVE-2016-8882_CVE-2016-9560.patch b/component/jasper/CVE-2016-1867_CVE-2016-8654_CVE-2016-8691_CVE-2016-8692_CVE-2016-8693_CVE-2016-8882_CVE-2016-9560.patch
deleted file mode 100644
index dd177643bb825dade47e246161dccb700a5658df..0000000000000000000000000000000000000000
--- a/component/jasper/CVE-2016-1867_CVE-2016-8654_CVE-2016-8691_CVE-2016-8692_CVE-2016-8693_CVE-2016-8882_CVE-2016-9560.patch
+++ /dev/null
@@ -1,194 +0,0 @@
-diff -Naur jasper-1.900.1-debian1.orig/src/libjasper/base/jas_stream.c jasper-1.900.1-debian1/src/libjasper/base/jas_stream.c
---- jasper-1.900.1-debian1.orig/src/libjasper/base/jas_stream.c	2017-02-07 22:46:28.000000000 +0100
-+++ jasper-1.900.1-debian1/src/libjasper/base/jas_stream.c	2017-02-07 22:46:07.040456152 +0100
-@@ -985,8 +985,9 @@
- {
- 	unsigned char *buf;
- 
--	assert(m->buf_);
--	if (!(buf = jas_realloc(m->buf_, bufsize))) {
-+	//assert(m->buf_);
-+	assert(bufsize >= 0);
-+	if (!(buf = jas_realloc(m->buf_, bufsize)) && bufsize) {
- 		return -1;
- 	}
- 	m->buf_ = buf;
-diff -Naur jasper-1.900.1-debian1.orig/src/libjasper/jpc/jpc_cs.c jasper-1.900.1-debian1/src/libjasper/jpc/jpc_cs.c
---- jasper-1.900.1-debian1.orig/src/libjasper/jpc/jpc_cs.c	2017-02-07 22:46:28.000000000 +0100
-+++ jasper-1.900.1-debian1/src/libjasper/jpc/jpc_cs.c	2017-02-07 22:46:02.168382641 +0100
-@@ -512,6 +512,16 @@
- 			jas_free(siz->comps);
- 			return -1;
- 		}
-+		if (siz->comps[i].hsamp == 0 || siz->comps[i].hsamp > 255) {
-+			jas_eprintf("invalid XRsiz value %d\n", siz->comps[i].hsamp);
-+			jas_free(siz->comps);
-+			return -1;
-+		}
-+		if (siz->comps[i].vsamp == 0 || siz->comps[i].vsamp > 255) {
-+			jas_eprintf("invalid YRsiz value %d\n", siz->comps[i].vsamp);
-+			jas_free(siz->comps);
-+			return -1;
-+		}
- 		siz->comps[i].sgnd = (tmp >> 7) & 1;
- 		siz->comps[i].prec = (tmp & 0x7f) + 1;
- 	}
-diff -Naur jasper-1.900.1-debian1.orig/src/libjasper/jpc/jpc_dec.c jasper-1.900.1-debian1/src/libjasper/jpc/jpc_dec.c
---- jasper-1.900.1-debian1.orig/src/libjasper/jpc/jpc_dec.c	2017-02-07 22:46:28.000000000 +0100
-+++ jasper-1.900.1-debian1/src/libjasper/jpc/jpc_dec.c	2017-02-07 22:46:13.736555435 +0100
-@@ -674,7 +674,7 @@
- 	uint_fast32_t tmpxend;
- 	uint_fast32_t tmpyend;
- 	jpc_dec_cp_t *cp;
--	jpc_tsfb_band_t bnds[64];
-+	jpc_tsfb_band_t bnds[JPC_MAXBANDS];
- 	jpc_pchg_t *pchg;
- 	int pchgno;
- 	jpc_dec_cmpt_t *cmpt;
-@@ -989,23 +989,23 @@
- }
- 	if (tile->cp) {
- 		jpc_dec_cp_destroy(tile->cp);
--		tile->cp = 0;
-+		//tile->cp = 0;
- 	}
- 	if (tile->tcomps) {
- 		jas_free(tile->tcomps);
--		tile->tcomps = 0;
-+		//tile->tcomps = 0;
- 	}
- 	if (tile->pi) {
- 		jpc_pi_destroy(tile->pi);
--		tile->pi = 0;
-+		//tile->pi = 0;
- 	}
- 	if (tile->pkthdrstream) {
- 		jas_stream_close(tile->pkthdrstream);
--		tile->pkthdrstream = 0;
-+		//tile->pkthdrstream = 0;
- 	}
- 	if (tile->pptstab) {
- 		jpc_ppxstab_destroy(tile->pptstab);
--		tile->pptstab = 0;
-+		//tile->pptstab = 0;
- 	}
- 
- 	tile->state = JPC_TILE_DONE;
-@@ -1148,7 +1148,11 @@
- 				return -1;
- 			}
- 		}
--		jpc_dec_tilefini(dec, tile);
-+		/* If the tile has not yet been finalized, finalize it. */
-+		// OLD CODE: jpc_dec_tilefini(dec, tile);
-+		if (tile->state != JPC_TILE_DONE) {
-+			jpc_dec_tilefini(dec, tile);
-+		}
- 	}
- 
- 	/* We are done processing the code stream. */
-@@ -1204,6 +1208,8 @@
- 	dec->numhtiles = JPC_CEILDIV(dec->xend - dec->tilexoff, dec->tilewidth);
- 	dec->numvtiles = JPC_CEILDIV(dec->yend - dec->tileyoff, dec->tileheight);
- 	dec->numtiles = dec->numhtiles * dec->numvtiles;
-+	JAS_DBGLOG(10, ("numtiles = %d; numhtiles = %d; numvtiles = %d;\n",
-+	  dec->numtiles, dec->numhtiles, dec->numvtiles));
- 	if (!(dec->tiles = jas_alloc2(dec->numtiles, sizeof(jpc_dec_tile_t)))) {
- 		return -1;
- 	}
-@@ -1228,6 +1234,7 @@
- 		tile->pkthdrstreampos = 0;
- 		tile->pptstab = 0;
- 		tile->cp = 0;
-+		tile->pi = 0;
- 		if (!(tile->tcomps = jas_alloc2(dec->numcomps,
- 		  sizeof(jpc_dec_tcomp_t)))) {
- 			return -1;
-diff -Naur jasper-1.900.1-debian1.orig/src/libjasper/jpc/jpc_qmfb.c jasper-1.900.1-debian1/src/libjasper/jpc/jpc_qmfb.c
---- jasper-1.900.1-debian1.orig/src/libjasper/jpc/jpc_qmfb.c	2017-02-07 22:46:28.000000000 +0100
-+++ jasper-1.900.1-debian1/src/libjasper/jpc/jpc_qmfb.c	2017-02-07 22:45:59.328339293 +0100
-@@ -372,7 +372,7 @@
- 	register jpc_fix_t *dstptr;
- 	register int n;
- 	register int m;
--	int hstartcol;
-+	int hstartrow;
- 
- 	/* Get a buffer. */
- 	if (bufsize > QMFB_SPLITBUFSIZE) {
-@@ -383,8 +383,9 @@
- 	}
- 
- 	if (numrows >= 2) {
--		hstartcol = (numrows + 1 - parity) >> 1;
--		m = (parity) ? hstartcol : (numrows - hstartcol);
-+		hstartrow = (numrows + 1 - parity) >> 1;
-+		m = (parity) ? hstartrow : (numrows - hstartrow);
-+
- 		/* Save the samples destined for the highpass channel. */
- 		n = m;
- 		dstptr = buf;
-@@ -404,7 +405,7 @@
- 			srcptr += stride << 1;
- 		}
- 		/* Copy the saved samples into the highpass channel. */
--		dstptr = &a[hstartcol * stride];
-+		dstptr = &a[hstartrow * stride];
- 		srcptr = buf;
- 		n = m;
- 		while (n-- > 0) {
-@@ -435,19 +436,20 @@
- 	register int n;
- 	register int i;
- 	int m;
--	int hstartcol;
-+	int hstartrow;
- 
- 	/* Get a buffer. */
- 	if (bufsize > QMFB_SPLITBUFSIZE) {
--		if (!(buf = jas_alloc2(bufsize, sizeof(jpc_fix_t)))) {
-+                if (!(buf = jas_alloc3(bufsize, JPC_QMFB_COLGRPSIZE, sizeof(jpc_fix_t)))) {
- 			/* We have no choice but to commit suicide in this case. */
- 			abort();
- 		}
- 	}
- 
- 	if (numrows >= 2) {
--		hstartcol = (numrows + 1 - parity) >> 1;
--		m = (parity) ? hstartcol : (numrows - hstartcol);
-+		hstartrow = (numrows + 1 - parity) >> 1;
-+		m = (parity) ? hstartrow : (numrows - hstartrow);
-+
- 		/* Save the samples destined for the highpass channel. */
- 		n = m;
- 		dstptr = buf;
-@@ -479,7 +481,7 @@
- 			srcptr += stride << 1;
- 		}
- 		/* Copy the saved samples into the highpass channel. */
--		dstptr = &a[hstartcol * stride];
-+		dstptr = &a[hstartrow * stride];
- 		srcptr = buf;
- 		n = m;
- 		while (n-- > 0) {
-@@ -520,7 +522,7 @@
- 
- 	/* Get a buffer. */
- 	if (bufsize > QMFB_SPLITBUFSIZE) {
--		if (!(buf = jas_alloc2(bufsize, sizeof(jpc_fix_t)))) {
-+		if (!(buf = jas_alloc3(bufsize, numcols, sizeof(jpc_fix_t)))) {
- 			/* We have no choice but to commit suicide in this case. */
- 			abort();
- 		}
-diff -Naur jasper-1.900.1-debian1.orig/src/libjasper/jpc/jpc_t2cod.c jasper-1.900.1-debian1/src/libjasper/jpc/jpc_t2cod.c
---- jasper-1.900.1-debian1.orig/src/libjasper/jpc/jpc_t2cod.c	2017-02-07 22:46:28.000000000 +0100
-+++ jasper-1.900.1-debian1/src/libjasper/jpc/jpc_t2cod.c	2017-02-07 22:45:54.464331040 +0100
-@@ -429,7 +429,7 @@
- 	}
- 
- 	for (pi->compno = pchg->compnostart, pi->picomp =
--	  &pi->picomps[pi->compno]; pi->compno < JAS_CAST(int, pchg->compnoend); ++pi->compno,
-+	  &pi->picomps[pi->compno]; pi->compno < JAS_CAST(int, pchg->compnoend) && pi->compno < pi->numcomps; ++pi->compno,
- 	  ++pi->picomp) {
- 		pirlvl = pi->picomp->pirlvls;
- 		pi->xstep = pi->picomp->hsamp * (1 << (pirlvl->prcwidthexpn +
diff --git a/component/jasper/CVE-2016-2089.patch b/component/jasper/CVE-2016-2089.patch
deleted file mode 100644
index 95d4b6111144aaf77d1935f5abcd10ce153c3007..0000000000000000000000000000000000000000
--- a/component/jasper/CVE-2016-2089.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-Description: CVE-2016-2089: matrix rows_ NULL pointer dereference in jas_matrix_clip()
-Origin: vendor
-Bug-RedHat: https://bugzilla.redhat.com/show_bug.cgi?id=1302636
-Bug-Debian: https://bugs.debian.org/812978
-Forwarded: not-needed
-Author: Tomas Hoger <thoger@redhat.com>
-Reviewed-by: Salvatore Bonaccorso <carnil@debian.org>
-Last-Update: 2016-03-05
-
---- a/src/libjasper/base/jas_image.c
-+++ b/src/libjasper/base/jas_image.c
-@@ -426,6 +426,10 @@ int jas_image_readcmpt(jas_image_t *imag
- 		return -1;
- 	}
- 
-+	if (!data->rows_) {
-+		return -1;
-+	}
-+
- 	if (jas_matrix_numrows(data) != height || jas_matrix_numcols(data) != width) {
- 		if (jas_matrix_resize(data, height, width)) {
- 			return -1;
-@@ -479,6 +483,10 @@ int jas_image_writecmpt(jas_image_t *ima
- 		return -1;
- 	}
- 
-+	if (!data->rows_) {
-+		return -1;
-+	}
-+
- 	if (jas_matrix_numrows(data) != height || jas_matrix_numcols(data) != width) {
- 		return -1;
- 	}
---- a/src/libjasper/base/jas_seq.c
-+++ b/src/libjasper/base/jas_seq.c
-@@ -262,6 +262,10 @@ void jas_matrix_divpow2(jas_matrix_t *ma
- 	int rowstep;
- 	jas_seqent_t *data;
- 
-+	if (!matrix->rows_) {
-+		return;
-+	}
-+
- 	rowstep = jas_matrix_rowstep(matrix);
- 	for (i = matrix->numrows_, rowstart = matrix->rows_[0]; i > 0; --i,
- 	  rowstart += rowstep) {
-@@ -282,6 +286,10 @@ void jas_matrix_clip(jas_matrix_t *matri
- 	jas_seqent_t *data;
- 	int rowstep;
- 
-+	if (!matrix->rows_) {
-+		return;
-+	}
-+
- 	rowstep = jas_matrix_rowstep(matrix);
- 	for (i = matrix->numrows_, rowstart = matrix->rows_[0]; i > 0; --i,
- 	  rowstart += rowstep) {
-@@ -306,6 +314,10 @@ void jas_matrix_asr(jas_matrix_t *matrix
- 	int rowstep;
- 	jas_seqent_t *data;
- 
-+	if (!matrix->rows_) {
-+		return;
-+	}
-+
- 	assert(n >= 0);
- 	rowstep = jas_matrix_rowstep(matrix);
- 	for (i = matrix->numrows_, rowstart = matrix->rows_[0]; i > 0; --i,
-@@ -325,6 +337,10 @@ void jas_matrix_asl(jas_matrix_t *matrix
- 	int rowstep;
- 	jas_seqent_t *data;
- 
-+	if (!matrix->rows_) {
-+		return;
-+	}
-+
- 	rowstep = jas_matrix_rowstep(matrix);
- 	for (i = matrix->numrows_, rowstart = matrix->rows_[0]; i > 0; --i,
- 	  rowstart += rowstep) {
-@@ -367,6 +383,10 @@ void jas_matrix_setall(jas_matrix_t *mat
- 	int rowstep;
- 	jas_seqent_t *data;
- 
-+	if (!matrix->rows_) {
-+		return;
-+	}
-+
- 	rowstep = jas_matrix_rowstep(matrix);
- 	for (i = matrix->numrows_, rowstart = matrix->rows_[0]; i > 0; --i,
- 	  rowstart += rowstep) {
diff --git a/component/jasper/CVE-2016-2116.patch b/component/jasper/CVE-2016-2116.patch
deleted file mode 100644
index cdb616fb6a926dc28ca546360fa04b9bbfec19cd..0000000000000000000000000000000000000000
--- a/component/jasper/CVE-2016-2116.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Description: CVE-2016-2116: Prevent jas_stream_t memory leak in jas_iccprof_createfrombuf()
-Origin: vendor, http://www.openwall.com/lists/oss-security/2016/03/03/12
-Bug-Debian: https://bugs.debian.org/816626
-Forwarded: not-needed
-Author: Tyler Hicks <tyhicks@canoonical.com>
-Reviewed-by: Salvatore Bonaccorso <carnil@debian.org>
-Last-Update: 2016-03-05
-
---- a/src/libjasper/base/jas_icc.c
-+++ b/src/libjasper/base/jas_icc.c
-@@ -1693,6 +1693,8 @@ jas_iccprof_t *jas_iccprof_createfrombuf
- 	jas_stream_close(in);
- 	return prof;
- error:
-+	if (in)
-+		jas_stream_close(in);
- 	return 0;
- }
- 
diff --git a/component/jasper/buildout.cfg b/component/jasper/buildout.cfg
index 48e82f482fe4d1873a93357f82586d0de2894612..1b1df580244f7442356cffbe9696bad946bf0b54 100644
--- a/component/jasper/buildout.cfg
+++ b/component/jasper/buildout.cfg
@@ -11,18 +11,7 @@ url = http://www.ece.uvic.ca/~mdadams/jasper/software/jasper-1.900.1.zip
 md5sum = a342b2b4495b3e1394e161eb5d85d754
 patch-options = -p1
 patches =
-  ${:_profile_base_location_}/misc-fixes.patch#1202be8418907dfe58f819f7b47da24f
-  ${:_profile_base_location_}/fix-filename-buffer-overflow.patch#38403f9c82a18547beca16c9c6f4ce7a
-  ${:_profile_base_location_}/CVE-2011-4516-and-CVE-2011-4517.patch#a9676718ed016f66a3c76acf764c9e72
-  ${:_profile_base_location_}/CVE-2014-9029.patch#d69195cf17878f024cc0b580045ec314
-  ${:_profile_base_location_}/CVE-2014-8137.patch#bc5103b9a33315538106bf6652383a10
-  ${:_profile_base_location_}/CVE-2014-8138.patch#bfb9604fe84b6e686fea29bd760cf34d
-  ${:_profile_base_location_}/CVE-2014-8157.patch#2fb5f62ba8a9f8afffc95a07d1194783
-  ${:_profile_base_location_}/CVE-2014-8158.patch#9036077a1fab5de8819f210ea7b57a38
-  ${:_profile_base_location_}/CVE-2016-1577.patch#bc970cf3e8535559454781ec54db2d15
-  ${:_profile_base_location_}/CVE-2016-2089.patch#9b73eda015b04a6da493de89ce9b5685
-  ${:_profile_base_location_}/CVE-2016-2116.patch#387df217963281827e006ab4f14f869a
-  ${:_profile_base_location_}/CVE-2016-1867_CVE-2016-8654_CVE-2016-8691_CVE-2016-8692_CVE-2016-8693_CVE-2016-8882_CVE-2016-9560.patch#0bcc58c823aa19ac4beef469d65dbb56
+  ${:_profile_base_location_}/jasper_1.900.1-debian1-2.4+deb8u3.patch#1cf61d1ebc87d355523d3484169671f7
 configure-options =
   --disable-static
   --enable-shared
diff --git a/component/jasper/fix-filename-buffer-overflow.patch b/component/jasper/fix-filename-buffer-overflow.patch
deleted file mode 100644
index eba6cbe49a8b9236e31dcf183897eaa80ac24c48..0000000000000000000000000000000000000000
--- a/component/jasper/fix-filename-buffer-overflow.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-Description: Filename buffer overflow fix
- This patch fixes a security hole by a bad buffer size handling.
-Author: Roland Stigge <stigge@antcom.de>
-Bug-Debian: http://bugs.debian.org/645118
-
---- a/src/libjasper/include/jasper/jas_stream.h
-+++ b/src/libjasper/include/jasper/jas_stream.h
-@@ -77,6 +77,7 @@
- #include <jasper/jas_config.h>
- 
- #include <stdio.h>
-+#include <limits.h>
- #if defined(HAVE_FCNTL_H)
- #include <fcntl.h>
- #endif
-@@ -99,6 +100,12 @@ extern "C" {
- #define O_BINARY	0
- #endif
- 
-+#ifdef PATH_MAX
-+#define JAS_PATH_MAX PATH_MAX
-+#else
-+#define JAS_PATH_MAX 4096
-+#endif
-+
- /*
-  * Stream open flags.
-  */
-@@ -251,7 +258,7 @@ typedef struct {
- typedef struct {
- 	int fd;
- 	int flags;
--	char pathname[L_tmpnam + 1];
-+	char pathname[JAS_PATH_MAX + 1];
- } jas_stream_fileobj_t;
- 
- #define	JAS_STREAM_FILEOBJ_DELONCLOSE	0x01
diff --git a/component/jasper/misc-fixes.patch b/component/jasper/jasper_1.900.1-debian1-2.4+deb8u3.patch
similarity index 71%
rename from component/jasper/misc-fixes.patch
rename to component/jasper/jasper_1.900.1-debian1-2.4+deb8u3.patch
index 1d27f81befa23031ec66b761a5af7d5f202da52f..08865995bf4a56b1ec6690c2baba0a55a46638e0 100644
--- a/component/jasper/misc-fixes.patch
+++ b/component/jasper/jasper_1.900.1-debian1-2.4+deb8u3.patch
@@ -3090,3 +3090,1323 @@ Author: Roland Stigge <stigge@antcom.de>
  
  If the version you run ($0) is already up to date, please
  send the following data and any information you think might be
+Description: Filename buffer overflow fix
+ This patch fixes a security hole by a bad buffer size handling.
+Author: Roland Stigge <stigge@antcom.de>
+Bug-Debian: http://bugs.debian.org/645118
+
+--- a/src/libjasper/include/jasper/jas_stream.h
++++ b/src/libjasper/include/jasper/jas_stream.h
+@@ -77,6 +77,7 @@
+ #include <jasper/jas_config.h>
+ 
+ #include <stdio.h>
++#include <limits.h>
+ #if defined(HAVE_FCNTL_H)
+ #include <fcntl.h>
+ #endif
+@@ -99,6 +100,12 @@ extern "C" {
+ #define O_BINARY	0
+ #endif
+ 
++#ifdef PATH_MAX
++#define JAS_PATH_MAX PATH_MAX
++#else
++#define JAS_PATH_MAX 4096
++#endif
++
+ /*
+  * Stream open flags.
+  */
+@@ -251,7 +258,7 @@ typedef struct {
+ typedef struct {
+ 	int fd;
+ 	int flags;
+-	char pathname[L_tmpnam + 1];
++	char pathname[JAS_PATH_MAX + 1];
+ } jas_stream_fileobj_t;
+ 
+ #define	JAS_STREAM_FILEOBJ_DELONCLOSE	0x01
+Description: Fix for CVE-2011-4516 and CVE-2011-4517
+ This patch fixes a possible denial of service and code execution via
+ heap-based buffer overflows.
+Author: Michael Gilbert <michael.s.gilbert@gmail.com>
+Origin: Patch thanks to Red Hat
+Bug-Debian: http://bugs.debian.org/652649
+
+Index: jasper-1.900.1/src/libjasper/jpc/jpc_cs.c
+===================================================================
+--- jasper-1.900.1.orig/src/libjasper/jpc/jpc_cs.c	2011-12-19 09:35:34.186909298 -0500
++++ jasper-1.900.1/src/libjasper/jpc/jpc_cs.c	2011-12-19 09:35:51.198909832 -0500
+@@ -744,6 +744,10 @@
+ 		return -1;
+ 	}
+ 	compparms->numrlvls = compparms->numdlvls + 1;
++	if (compparms->numrlvls > JPC_MAXRLVLS) {
++		jpc_cox_destroycompparms(compparms);
++		return -1;
++	}
+ 	if (prtflag) {
+ 		for (i = 0; i < compparms->numrlvls; ++i) {
+ 			if (jpc_getuint8(in, &tmp)) {
+@@ -1331,7 +1335,7 @@
+ 	jpc_crgcomp_t *comp;
+ 	uint_fast16_t compno;
+ 	crg->numcomps = cstate->numcomps;
+-	if (!(crg->comps = jas_alloc2(cstate->numcomps, sizeof(uint_fast16_t)))) {
++	if (!(crg->comps = jas_alloc2(cstate->numcomps, sizeof(jpc_crgcomp_t)))) {
+ 		return -1;
+ 	}
+ 	for (compno = 0, comp = crg->comps; compno < cstate->numcomps;
+Description: CVE-2014-9029: Heap overflows in libjasper
+Origin: vendor, https://bugzilla.redhat.com/attachment.cgi?id=961994&action=diff
+Bug-Debian: https://bugs.debian.org/772036
+Bug-RedHat: https://bugzilla.redhat.com/show_bug.cgi?id=1167537
+Forwarded: no
+Author: Tomas Hoger <thoger@redhat.com>
+Reviewed-by: Salvatore Bonaccorso <carnil@debian.org>
+Last-Update: 2014-11-28
+
+--- a/src/libjasper/jpc/jpc_dec.c
++++ b/src/libjasper/jpc/jpc_dec.c
+@@ -1280,7 +1280,7 @@ static int jpc_dec_process_coc(jpc_dec_t
+ 	jpc_coc_t *coc = &ms->parms.coc;
+ 	jpc_dec_tile_t *tile;
+ 
+-	if (JAS_CAST(int, coc->compno) > dec->numcomps) {
++	if (JAS_CAST(int, coc->compno) >= dec->numcomps) {
+ 		jas_eprintf("invalid component number in COC marker segment\n");
+ 		return -1;
+ 	}
+@@ -1306,7 +1306,7 @@ static int jpc_dec_process_rgn(jpc_dec_t
+ 	jpc_rgn_t *rgn = &ms->parms.rgn;
+ 	jpc_dec_tile_t *tile;
+ 
+-	if (JAS_CAST(int, rgn->compno) > dec->numcomps) {
++	if (JAS_CAST(int, rgn->compno) >= dec->numcomps) {
+ 		jas_eprintf("invalid component number in RGN marker segment\n");
+ 		return -1;
+ 	}
+@@ -1355,7 +1355,7 @@ static int jpc_dec_process_qcc(jpc_dec_t
+ 	jpc_qcc_t *qcc = &ms->parms.qcc;
+ 	jpc_dec_tile_t *tile;
+ 
+-	if (JAS_CAST(int, qcc->compno) > dec->numcomps) {
++	if (JAS_CAST(int, qcc->compno) >= dec->numcomps) {
+ 		jas_eprintf("invalid component number in QCC marker segment\n");
+ 		return -1;
+ 	}
+Description: CVE-2014-8137: double-free in in jas_iccattrval_destroy()
+Origin: vendor, https://bugzilla.redhat.com/attachment.cgi?id=967283,
+ https://bugzilla.redhat.com/attachment.cgi?id=967284
+Bug-Debian: https://bugs.debian.org/773463
+Bug-RedHat: https://bugzilla.redhat.com/show_bug.cgi?id=1173157
+Forwarded: no
+Author: Tomas Hoger <thoger@redhat.com>
+Last-Update: 2014-12-20
+
+--- a/src/libjasper/base/jas_icc.c
++++ b/src/libjasper/base/jas_icc.c
+@@ -1010,7 +1010,6 @@ static int jas_icccurv_input(jas_iccattr
+ 	return 0;
+ 
+ error:
+-	jas_icccurv_destroy(attrval);
+ 	return -1;
+ }
+ 
+@@ -1128,7 +1127,6 @@ static int jas_icctxtdesc_input(jas_icca
+ #endif
+ 	return 0;
+ error:
+-	jas_icctxtdesc_destroy(attrval);
+ 	return -1;
+ }
+ 
+@@ -1207,8 +1205,6 @@ static int jas_icctxt_input(jas_iccattrv
+ 		goto error;
+ 	return 0;
+ error:
+-	if (txt->string)
+-		jas_free(txt->string);
+ 	return -1;
+ }
+ 
+@@ -1329,7 +1325,6 @@ static int jas_icclut8_input(jas_iccattr
+ 		goto error;
+ 	return 0;
+ error:
+-	jas_icclut8_destroy(attrval);
+ 	return -1;
+ }
+ 
+@@ -1498,7 +1493,6 @@ static int jas_icclut16_input(jas_iccatt
+ 		goto error;
+ 	return 0;
+ error:
+-	jas_icclut16_destroy(attrval);
+ 	return -1;
+ }
+ 
+--- a/src/libjasper/jp2/jp2_dec.c
++++ b/src/libjasper/jp2/jp2_dec.c
+@@ -291,7 +291,10 @@ jas_image_t *jp2_decode(jas_stream_t *in
+ 	case JP2_COLR_ICC:
+ 		iccprof = jas_iccprof_createfrombuf(dec->colr->data.colr.iccp,
+ 		  dec->colr->data.colr.iccplen);
+-		assert(iccprof);
++		if (!iccprof) {
++			jas_eprintf("error: failed to parse ICC profile\n");
++			goto error;
++		}
+ 		jas_iccprof_gethdr(iccprof, &icchdr);
+ 		jas_eprintf("ICC Profile CS %08x\n", icchdr.colorspc);
+ 		jas_image_setclrspc(dec->image, fromiccpcs(icchdr.colorspc));
+Description: CVE-2014-8138: heap overflow in jp2_decode()
+Origin: vendor, https://bugzilla.redhat.com/attachment.cgi?id=967280
+Bug-Debian: https://bugs.debian.org/773463
+Bug-RedHat: https://bugzilla.redhat.com/show_bug.cgi?id=1173162
+Forwarded: no
+Author: Tomas Hoger <thoger@redhat.com>
+Last-Update: 2014-12-20
+
+--- a/src/libjasper/jp2/jp2_dec.c
++++ b/src/libjasper/jp2/jp2_dec.c
+@@ -389,6 +389,11 @@ jas_image_t *jp2_decode(jas_stream_t *in
+ 	/* Determine the type of each component. */
+ 	if (dec->cdef) {
+ 		for (i = 0; i < dec->numchans; ++i) {
++			/* Is the channel number reasonable? */
++			if (dec->cdef->data.cdef.ents[i].channo >= dec->numchans) {
++				jas_eprintf("error: invalid channel number in CDEF box\n");
++				goto error;
++			}
+ 			jas_image_setcmpttype(dec->image,
+ 			  dec->chantocmptlut[dec->cdef->data.cdef.ents[i].channo],
+ 			  jp2_getct(jas_image_clrspc(dec->image),
+Description: CVE-2014-8157: dec->numtiles off-by-one check in jpc_dec_process_sot()
+Origin: vendor, http://pkgs.fedoraproject.org/cgit/jasper.git/tree/jasper-CVE-2014-8157.patch
+Bug-RedHat: https://bugzilla.redhat.com/show_bug.cgi?id=1179282
+Bug-Debian: https://bugs.debian.org/775970
+Forwarded: not-needed
+Author: Salvatore Bonaccorso <carnil@debian.org>
+Last-Update: 2015-01-22
+
+--- a/src/libjasper/jpc/jpc_dec.c
++++ b/src/libjasper/jpc/jpc_dec.c
+@@ -489,7 +489,7 @@ static int jpc_dec_process_sot(jpc_dec_t
+ 		dec->curtileendoff = 0;
+ 	}
+ 
+-	if (JAS_CAST(int, sot->tileno) > dec->numtiles) {
++	if (JAS_CAST(int, sot->tileno) >= dec->numtiles) {
+ 		jas_eprintf("invalid tile number in SOT marker segment\n");
+ 		return -1;
+ 	}
+Description: CVE-2014-8158: unrestricted stack memory use in jpc_qmfb.c
+Origin: vendor, http://pkgs.fedoraproject.org/cgit/jasper.git/tree/jasper-CVE-2014-8158.patch
+Bug-RedHat: https://bugzilla.redhat.com/show_bug.cgi?id=1179298
+Bug-Debian: https://bugs.debian.org/775970
+Forwarded: not-needed
+Author: Salvatore Bonaccorso <carnil@debian.org>
+Last-Update: 2015-01-22
+
+--- a/src/libjasper/jpc/jpc_qmfb.c
++++ b/src/libjasper/jpc/jpc_qmfb.c
+@@ -306,11 +306,7 @@ void jpc_qmfb_split_row(jpc_fix_t *a, in
+ {
+ 
+ 	int bufsize = JPC_CEILDIVPOW2(numcols, 1);
+-#if !defined(HAVE_VLA)
+ 	jpc_fix_t splitbuf[QMFB_SPLITBUFSIZE];
+-#else
+-	jpc_fix_t splitbuf[bufsize];
+-#endif
+ 	jpc_fix_t *buf = splitbuf;
+ 	register jpc_fix_t *srcptr;
+ 	register jpc_fix_t *dstptr;
+@@ -318,7 +314,6 @@ void jpc_qmfb_split_row(jpc_fix_t *a, in
+ 	register int m;
+ 	int hstartcol;
+ 
+-#if !defined(HAVE_VLA)
+ 	/* Get a buffer. */
+ 	if (bufsize > QMFB_SPLITBUFSIZE) {
+ 		if (!(buf = jas_alloc2(bufsize, sizeof(jpc_fix_t)))) {
+@@ -326,7 +321,6 @@ void jpc_qmfb_split_row(jpc_fix_t *a, in
+ 			abort();
+ 		}
+ 	}
+-#endif
+ 
+ 	if (numcols >= 2) {
+ 		hstartcol = (numcols + 1 - parity) >> 1;
+@@ -360,12 +354,10 @@ void jpc_qmfb_split_row(jpc_fix_t *a, in
+ 		}
+ 	}
+ 
+-#if !defined(HAVE_VLA)
+ 	/* If the split buffer was allocated on the heap, free this memory. */
+ 	if (buf != splitbuf) {
+ 		jas_free(buf);
+ 	}
+-#endif
+ 
+ }
+ 
+@@ -374,11 +366,7 @@ void jpc_qmfb_split_col(jpc_fix_t *a, in
+ {
+ 
+ 	int bufsize = JPC_CEILDIVPOW2(numrows, 1);
+-#if !defined(HAVE_VLA)
+ 	jpc_fix_t splitbuf[QMFB_SPLITBUFSIZE];
+-#else
+-	jpc_fix_t splitbuf[bufsize];
+-#endif
+ 	jpc_fix_t *buf = splitbuf;
+ 	register jpc_fix_t *srcptr;
+ 	register jpc_fix_t *dstptr;
+@@ -386,7 +374,6 @@ void jpc_qmfb_split_col(jpc_fix_t *a, in
+ 	register int m;
+ 	int hstartcol;
+ 
+-#if !defined(HAVE_VLA)
+ 	/* Get a buffer. */
+ 	if (bufsize > QMFB_SPLITBUFSIZE) {
+ 		if (!(buf = jas_alloc2(bufsize, sizeof(jpc_fix_t)))) {
+@@ -394,7 +381,6 @@ void jpc_qmfb_split_col(jpc_fix_t *a, in
+ 			abort();
+ 		}
+ 	}
+-#endif
+ 
+ 	if (numrows >= 2) {
+ 		hstartcol = (numrows + 1 - parity) >> 1;
+@@ -428,12 +414,10 @@ void jpc_qmfb_split_col(jpc_fix_t *a, in
+ 		}
+ 	}
+ 
+-#if !defined(HAVE_VLA)
+ 	/* If the split buffer was allocated on the heap, free this memory. */
+ 	if (buf != splitbuf) {
+ 		jas_free(buf);
+ 	}
+-#endif
+ 
+ }
+ 
+@@ -442,11 +426,7 @@ void jpc_qmfb_split_colgrp(jpc_fix_t *a,
+ {
+ 
+ 	int bufsize = JPC_CEILDIVPOW2(numrows, 1);
+-#if !defined(HAVE_VLA)
+ 	jpc_fix_t splitbuf[QMFB_SPLITBUFSIZE * JPC_QMFB_COLGRPSIZE];
+-#else
+-	jpc_fix_t splitbuf[bufsize * JPC_QMFB_COLGRPSIZE];
+-#endif
+ 	jpc_fix_t *buf = splitbuf;
+ 	jpc_fix_t *srcptr;
+ 	jpc_fix_t *dstptr;
+@@ -457,7 +437,6 @@ void jpc_qmfb_split_colgrp(jpc_fix_t *a,
+ 	int m;
+ 	int hstartcol;
+ 
+-#if !defined(HAVE_VLA)
+ 	/* Get a buffer. */
+ 	if (bufsize > QMFB_SPLITBUFSIZE) {
+ 		if (!(buf = jas_alloc2(bufsize, sizeof(jpc_fix_t)))) {
+@@ -465,7 +444,6 @@ void jpc_qmfb_split_colgrp(jpc_fix_t *a,
+ 			abort();
+ 		}
+ 	}
+-#endif
+ 
+ 	if (numrows >= 2) {
+ 		hstartcol = (numrows + 1 - parity) >> 1;
+@@ -517,12 +495,10 @@ void jpc_qmfb_split_colgrp(jpc_fix_t *a,
+ 		}
+ 	}
+ 
+-#if !defined(HAVE_VLA)
+ 	/* If the split buffer was allocated on the heap, free this memory. */
+ 	if (buf != splitbuf) {
+ 		jas_free(buf);
+ 	}
+-#endif
+ 
+ }
+ 
+@@ -531,11 +507,7 @@ void jpc_qmfb_split_colres(jpc_fix_t *a,
+ {
+ 
+ 	int bufsize = JPC_CEILDIVPOW2(numrows, 1);
+-#if !defined(HAVE_VLA)
+ 	jpc_fix_t splitbuf[QMFB_SPLITBUFSIZE * JPC_QMFB_COLGRPSIZE];
+-#else
+-	jpc_fix_t splitbuf[bufsize * numcols];
+-#endif
+ 	jpc_fix_t *buf = splitbuf;
+ 	jpc_fix_t *srcptr;
+ 	jpc_fix_t *dstptr;
+@@ -546,7 +518,6 @@ void jpc_qmfb_split_colres(jpc_fix_t *a,
+ 	int m;
+ 	int hstartcol;
+ 
+-#if !defined(HAVE_VLA)
+ 	/* Get a buffer. */
+ 	if (bufsize > QMFB_SPLITBUFSIZE) {
+ 		if (!(buf = jas_alloc2(bufsize, sizeof(jpc_fix_t)))) {
+@@ -554,7 +525,6 @@ void jpc_qmfb_split_colres(jpc_fix_t *a,
+ 			abort();
+ 		}
+ 	}
+-#endif
+ 
+ 	if (numrows >= 2) {
+ 		hstartcol = (numrows + 1 - parity) >> 1;
+@@ -606,12 +576,10 @@ void jpc_qmfb_split_colres(jpc_fix_t *a,
+ 		}
+ 	}
+ 
+-#if !defined(HAVE_VLA)
+ 	/* If the split buffer was allocated on the heap, free this memory. */
+ 	if (buf != splitbuf) {
+ 		jas_free(buf);
+ 	}
+-#endif
+ 
+ }
+ 
+@@ -619,18 +587,13 @@ void jpc_qmfb_join_row(jpc_fix_t *a, int
+ {
+ 
+ 	int bufsize = JPC_CEILDIVPOW2(numcols, 1);
+-#if !defined(HAVE_VLA)
+ 	jpc_fix_t joinbuf[QMFB_JOINBUFSIZE];
+-#else
+-	jpc_fix_t joinbuf[bufsize];
+-#endif
+ 	jpc_fix_t *buf = joinbuf;
+ 	register jpc_fix_t *srcptr;
+ 	register jpc_fix_t *dstptr;
+ 	register int n;
+ 	int hstartcol;
+ 
+-#if !defined(HAVE_VLA)
+ 	/* Allocate memory for the join buffer from the heap. */
+ 	if (bufsize > QMFB_JOINBUFSIZE) {
+ 		if (!(buf = jas_alloc2(bufsize, sizeof(jpc_fix_t)))) {
+@@ -638,7 +601,6 @@ void jpc_qmfb_join_row(jpc_fix_t *a, int
+ 			abort();
+ 		}
+ 	}
+-#endif
+ 
+ 	hstartcol = (numcols + 1 - parity) >> 1;
+ 
+@@ -670,12 +632,10 @@ void jpc_qmfb_join_row(jpc_fix_t *a, int
+ 		++srcptr;
+ 	}
+ 
+-#if !defined(HAVE_VLA)
+ 	/* If the join buffer was allocated on the heap, free this memory. */
+ 	if (buf != joinbuf) {
+ 		jas_free(buf);
+ 	}
+-#endif
+ 
+ }
+ 
+@@ -684,18 +644,13 @@ void jpc_qmfb_join_col(jpc_fix_t *a, int
+ {
+ 
+ 	int bufsize = JPC_CEILDIVPOW2(numrows, 1);
+-#if !defined(HAVE_VLA)
+ 	jpc_fix_t joinbuf[QMFB_JOINBUFSIZE];
+-#else
+-	jpc_fix_t joinbuf[bufsize];
+-#endif
+ 	jpc_fix_t *buf = joinbuf;
+ 	register jpc_fix_t *srcptr;
+ 	register jpc_fix_t *dstptr;
+ 	register int n;
+ 	int hstartcol;
+ 
+-#if !defined(HAVE_VLA)
+ 	/* Allocate memory for the join buffer from the heap. */
+ 	if (bufsize > QMFB_JOINBUFSIZE) {
+ 		if (!(buf = jas_alloc2(bufsize, sizeof(jpc_fix_t)))) {
+@@ -703,7 +658,6 @@ void jpc_qmfb_join_col(jpc_fix_t *a, int
+ 			abort();
+ 		}
+ 	}
+-#endif
+ 
+ 	hstartcol = (numrows + 1 - parity) >> 1;
+ 
+@@ -735,12 +689,10 @@ void jpc_qmfb_join_col(jpc_fix_t *a, int
+ 		++srcptr;
+ 	}
+ 
+-#if !defined(HAVE_VLA)
+ 	/* If the join buffer was allocated on the heap, free this memory. */
+ 	if (buf != joinbuf) {
+ 		jas_free(buf);
+ 	}
+-#endif
+ 
+ }
+ 
+@@ -749,11 +701,7 @@ void jpc_qmfb_join_colgrp(jpc_fix_t *a,
+ {
+ 
+ 	int bufsize = JPC_CEILDIVPOW2(numrows, 1);
+-#if !defined(HAVE_VLA)
+ 	jpc_fix_t joinbuf[QMFB_JOINBUFSIZE * JPC_QMFB_COLGRPSIZE];
+-#else
+-	jpc_fix_t joinbuf[bufsize * JPC_QMFB_COLGRPSIZE];
+-#endif
+ 	jpc_fix_t *buf = joinbuf;
+ 	jpc_fix_t *srcptr;
+ 	jpc_fix_t *dstptr;
+@@ -763,7 +711,6 @@ void jpc_qmfb_join_colgrp(jpc_fix_t *a,
+ 	register int i;
+ 	int hstartcol;
+ 
+-#if !defined(HAVE_VLA)
+ 	/* Allocate memory for the join buffer from the heap. */
+ 	if (bufsize > QMFB_JOINBUFSIZE) {
+ 		if (!(buf = jas_alloc2(bufsize, JPC_QMFB_COLGRPSIZE * sizeof(jpc_fix_t)))) {
+@@ -771,7 +718,6 @@ void jpc_qmfb_join_colgrp(jpc_fix_t *a,
+ 			abort();
+ 		}
+ 	}
+-#endif
+ 
+ 	hstartcol = (numrows + 1 - parity) >> 1;
+ 
+@@ -821,12 +767,10 @@ void jpc_qmfb_join_colgrp(jpc_fix_t *a,
+ 		srcptr += JPC_QMFB_COLGRPSIZE;
+ 	}
+ 
+-#if !defined(HAVE_VLA)
+ 	/* If the join buffer was allocated on the heap, free this memory. */
+ 	if (buf != joinbuf) {
+ 		jas_free(buf);
+ 	}
+-#endif
+ 
+ }
+ 
+@@ -835,11 +779,7 @@ void jpc_qmfb_join_colres(jpc_fix_t *a,
+ {
+ 
+ 	int bufsize = JPC_CEILDIVPOW2(numrows, 1);
+-#if !defined(HAVE_VLA)
+ 	jpc_fix_t joinbuf[QMFB_JOINBUFSIZE * JPC_QMFB_COLGRPSIZE];
+-#else
+-	jpc_fix_t joinbuf[bufsize * numcols];
+-#endif
+ 	jpc_fix_t *buf = joinbuf;
+ 	jpc_fix_t *srcptr;
+ 	jpc_fix_t *dstptr;
+@@ -849,7 +789,6 @@ void jpc_qmfb_join_colres(jpc_fix_t *a,
+ 	register int i;
+ 	int hstartcol;
+ 
+-#if !defined(HAVE_VLA)
+ 	/* Allocate memory for the join buffer from the heap. */
+ 	if (bufsize > QMFB_JOINBUFSIZE) {
+ 		if (!(buf = jas_alloc3(bufsize, numcols, sizeof(jpc_fix_t)))) {
+@@ -857,7 +796,6 @@ void jpc_qmfb_join_colres(jpc_fix_t *a,
+ 			abort();
+ 		}
+ 	}
+-#endif
+ 
+ 	hstartcol = (numrows + 1 - parity) >> 1;
+ 
+@@ -907,12 +845,10 @@ void jpc_qmfb_join_colres(jpc_fix_t *a,
+ 		srcptr += numcols;
+ 	}
+ 
+-#if !defined(HAVE_VLA)
+ 	/* If the join buffer was allocated on the heap, free this memory. */
+ 	if (buf != joinbuf) {
+ 		jas_free(buf);
+ 	}
+-#endif
+ 
+ }
+ 
+Description: CVE-2016-1577: Prevent double-free in jas_iccattrval_destroy()
+Origin: vendor, http://www.openwall.com/lists/oss-security/2016/03/03/12
+Bug-Ubuntu: https://launchpad.net/bugs/1547865
+Bug-Debian: https://bugs.debian.org/816625
+Forwarded: not-needed
+Author: Tyler Hicks <tyhicks@canonical.com>
+Reviewed-by: Salvatore Bonaccorso <carnil@debian.org>
+Last-Update: 2016-03-05
+
+--- a/src/libjasper/base/jas_icc.c
++++ b/src/libjasper/base/jas_icc.c
+@@ -300,6 +300,7 @@ jas_iccprof_t *jas_iccprof_load(jas_stre
+ 				if (jas_iccprof_setattr(prof, tagtabent->tag, attrval))
+ 					goto error;
+ 				jas_iccattrval_destroy(attrval);
++				attrval = 0;
+ 			} else {
+ #if 0
+ 				jas_eprintf("warning: skipping unknown tag type\n");
+Description: CVE-2016-2089: matrix rows_ NULL pointer dereference in jas_matrix_clip()
+Origin: vendor
+Bug-RedHat: https://bugzilla.redhat.com/show_bug.cgi?id=1302636
+Bug-Debian: https://bugs.debian.org/812978
+Forwarded: not-needed
+Author: Tomas Hoger <thoger@redhat.com>
+Reviewed-by: Salvatore Bonaccorso <carnil@debian.org>
+Last-Update: 2016-03-05
+
+--- a/src/libjasper/base/jas_image.c
++++ b/src/libjasper/base/jas_image.c
+@@ -426,6 +426,10 @@ int jas_image_readcmpt(jas_image_t *imag
+ 		return -1;
+ 	}
+ 
++	if (!data->rows_) {
++		return -1;
++	}
++
+ 	if (jas_matrix_numrows(data) != height || jas_matrix_numcols(data) != width) {
+ 		if (jas_matrix_resize(data, height, width)) {
+ 			return -1;
+@@ -479,6 +483,10 @@ int jas_image_writecmpt(jas_image_t *ima
+ 		return -1;
+ 	}
+ 
++	if (!data->rows_) {
++		return -1;
++	}
++
+ 	if (jas_matrix_numrows(data) != height || jas_matrix_numcols(data) != width) {
+ 		return -1;
+ 	}
+--- a/src/libjasper/base/jas_seq.c
++++ b/src/libjasper/base/jas_seq.c
+@@ -262,6 +262,10 @@ void jas_matrix_divpow2(jas_matrix_t *ma
+ 	int rowstep;
+ 	jas_seqent_t *data;
+ 
++	if (!matrix->rows_) {
++		return;
++	}
++
+ 	rowstep = jas_matrix_rowstep(matrix);
+ 	for (i = matrix->numrows_, rowstart = matrix->rows_[0]; i > 0; --i,
+ 	  rowstart += rowstep) {
+@@ -282,6 +286,10 @@ void jas_matrix_clip(jas_matrix_t *matri
+ 	jas_seqent_t *data;
+ 	int rowstep;
+ 
++	if (!matrix->rows_) {
++		return;
++	}
++
+ 	rowstep = jas_matrix_rowstep(matrix);
+ 	for (i = matrix->numrows_, rowstart = matrix->rows_[0]; i > 0; --i,
+ 	  rowstart += rowstep) {
+@@ -306,6 +314,10 @@ void jas_matrix_asr(jas_matrix_t *matrix
+ 	int rowstep;
+ 	jas_seqent_t *data;
+ 
++	if (!matrix->rows_) {
++		return;
++	}
++
+ 	assert(n >= 0);
+ 	rowstep = jas_matrix_rowstep(matrix);
+ 	for (i = matrix->numrows_, rowstart = matrix->rows_[0]; i > 0; --i,
+@@ -325,6 +337,10 @@ void jas_matrix_asl(jas_matrix_t *matrix
+ 	int rowstep;
+ 	jas_seqent_t *data;
+ 
++	if (!matrix->rows_) {
++		return;
++	}
++
+ 	rowstep = jas_matrix_rowstep(matrix);
+ 	for (i = matrix->numrows_, rowstart = matrix->rows_[0]; i > 0; --i,
+ 	  rowstart += rowstep) {
+@@ -367,6 +383,10 @@ void jas_matrix_setall(jas_matrix_t *mat
+ 	int rowstep;
+ 	jas_seqent_t *data;
+ 
++	if (!matrix->rows_) {
++		return;
++	}
++
+ 	rowstep = jas_matrix_rowstep(matrix);
+ 	for (i = matrix->numrows_, rowstart = matrix->rows_[0]; i > 0; --i,
+ 	  rowstart += rowstep) {
+Description: CVE-2016-2116: Prevent jas_stream_t memory leak in jas_iccprof_createfrombuf()
+Origin: vendor, http://www.openwall.com/lists/oss-security/2016/03/03/12
+Bug-Debian: https://bugs.debian.org/816626
+Forwarded: not-needed
+Author: Tyler Hicks <tyhicks@canoonical.com>
+Reviewed-by: Salvatore Bonaccorso <carnil@debian.org>
+Last-Update: 2016-03-05
+
+--- a/src/libjasper/base/jas_icc.c
++++ b/src/libjasper/base/jas_icc.c
+@@ -1693,6 +1693,8 @@ jas_iccprof_t *jas_iccprof_createfrombuf
+ 	jas_stream_close(in);
+ 	return prof;
+ error:
++	if (in)
++		jas_stream_close(in);
+ 	return 0;
+ }
+ 
+diff -Naur jasper-1.900.1-debian1.orig/src/libjasper/base/jas_stream.c jasper-1.900.1-debian1/src/libjasper/base/jas_stream.c
+--- jasper-1.900.1-debian1.orig/src/libjasper/base/jas_stream.c	2017-02-07 22:46:28.000000000 +0100
++++ jasper-1.900.1-debian1/src/libjasper/base/jas_stream.c	2017-02-07 22:46:07.040456152 +0100
+@@ -985,8 +985,9 @@
+ {
+ 	unsigned char *buf;
+ 
+-	assert(m->buf_);
+-	if (!(buf = jas_realloc(m->buf_, bufsize))) {
++	//assert(m->buf_);
++	assert(bufsize >= 0);
++	if (!(buf = jas_realloc(m->buf_, bufsize)) && bufsize) {
+ 		return -1;
+ 	}
+ 	m->buf_ = buf;
+diff -Naur jasper-1.900.1-debian1.orig/src/libjasper/jpc/jpc_cs.c jasper-1.900.1-debian1/src/libjasper/jpc/jpc_cs.c
+--- jasper-1.900.1-debian1.orig/src/libjasper/jpc/jpc_cs.c	2017-02-07 22:46:28.000000000 +0100
++++ jasper-1.900.1-debian1/src/libjasper/jpc/jpc_cs.c	2017-02-07 22:46:02.168382641 +0100
+@@ -512,6 +512,16 @@
+ 			jas_free(siz->comps);
+ 			return -1;
+ 		}
++		if (siz->comps[i].hsamp == 0 || siz->comps[i].hsamp > 255) {
++			jas_eprintf("invalid XRsiz value %d\n", siz->comps[i].hsamp);
++			jas_free(siz->comps);
++			return -1;
++		}
++		if (siz->comps[i].vsamp == 0 || siz->comps[i].vsamp > 255) {
++			jas_eprintf("invalid YRsiz value %d\n", siz->comps[i].vsamp);
++			jas_free(siz->comps);
++			return -1;
++		}
+ 		siz->comps[i].sgnd = (tmp >> 7) & 1;
+ 		siz->comps[i].prec = (tmp & 0x7f) + 1;
+ 	}
+diff -Naur jasper-1.900.1-debian1.orig/src/libjasper/jpc/jpc_dec.c jasper-1.900.1-debian1/src/libjasper/jpc/jpc_dec.c
+--- jasper-1.900.1-debian1.orig/src/libjasper/jpc/jpc_dec.c	2017-02-07 22:46:28.000000000 +0100
++++ jasper-1.900.1-debian1/src/libjasper/jpc/jpc_dec.c	2017-02-07 22:46:13.736555435 +0100
+@@ -674,7 +674,7 @@
+ 	uint_fast32_t tmpxend;
+ 	uint_fast32_t tmpyend;
+ 	jpc_dec_cp_t *cp;
+-	jpc_tsfb_band_t bnds[64];
++	jpc_tsfb_band_t bnds[JPC_MAXBANDS];
+ 	jpc_pchg_t *pchg;
+ 	int pchgno;
+ 	jpc_dec_cmpt_t *cmpt;
+@@ -989,23 +989,23 @@
+ }
+ 	if (tile->cp) {
+ 		jpc_dec_cp_destroy(tile->cp);
+-		tile->cp = 0;
++		//tile->cp = 0;
+ 	}
+ 	if (tile->tcomps) {
+ 		jas_free(tile->tcomps);
+-		tile->tcomps = 0;
++		//tile->tcomps = 0;
+ 	}
+ 	if (tile->pi) {
+ 		jpc_pi_destroy(tile->pi);
+-		tile->pi = 0;
++		//tile->pi = 0;
+ 	}
+ 	if (tile->pkthdrstream) {
+ 		jas_stream_close(tile->pkthdrstream);
+-		tile->pkthdrstream = 0;
++		//tile->pkthdrstream = 0;
+ 	}
+ 	if (tile->pptstab) {
+ 		jpc_ppxstab_destroy(tile->pptstab);
+-		tile->pptstab = 0;
++		//tile->pptstab = 0;
+ 	}
+ 
+ 	tile->state = JPC_TILE_DONE;
+@@ -1148,7 +1148,11 @@
+ 				return -1;
+ 			}
+ 		}
+-		jpc_dec_tilefini(dec, tile);
++		/* If the tile has not yet been finalized, finalize it. */
++		// OLD CODE: jpc_dec_tilefini(dec, tile);
++		if (tile->state != JPC_TILE_DONE) {
++			jpc_dec_tilefini(dec, tile);
++		}
+ 	}
+ 
+ 	/* We are done processing the code stream. */
+@@ -1204,6 +1208,8 @@
+ 	dec->numhtiles = JPC_CEILDIV(dec->xend - dec->tilexoff, dec->tilewidth);
+ 	dec->numvtiles = JPC_CEILDIV(dec->yend - dec->tileyoff, dec->tileheight);
+ 	dec->numtiles = dec->numhtiles * dec->numvtiles;
++	JAS_DBGLOG(10, ("numtiles = %d; numhtiles = %d; numvtiles = %d;\n",
++	  dec->numtiles, dec->numhtiles, dec->numvtiles));
+ 	if (!(dec->tiles = jas_alloc2(dec->numtiles, sizeof(jpc_dec_tile_t)))) {
+ 		return -1;
+ 	}
+@@ -1228,6 +1234,7 @@
+ 		tile->pkthdrstreampos = 0;
+ 		tile->pptstab = 0;
+ 		tile->cp = 0;
++		tile->pi = 0;
+ 		if (!(tile->tcomps = jas_alloc2(dec->numcomps,
+ 		  sizeof(jpc_dec_tcomp_t)))) {
+ 			return -1;
+diff -Naur jasper-1.900.1-debian1.orig/src/libjasper/jpc/jpc_qmfb.c jasper-1.900.1-debian1/src/libjasper/jpc/jpc_qmfb.c
+--- jasper-1.900.1-debian1.orig/src/libjasper/jpc/jpc_qmfb.c	2017-02-07 22:46:28.000000000 +0100
++++ jasper-1.900.1-debian1/src/libjasper/jpc/jpc_qmfb.c	2017-02-07 22:45:59.328339293 +0100
+@@ -372,7 +372,7 @@
+ 	register jpc_fix_t *dstptr;
+ 	register int n;
+ 	register int m;
+-	int hstartcol;
++	int hstartrow;
+ 
+ 	/* Get a buffer. */
+ 	if (bufsize > QMFB_SPLITBUFSIZE) {
+@@ -383,8 +383,9 @@
+ 	}
+ 
+ 	if (numrows >= 2) {
+-		hstartcol = (numrows + 1 - parity) >> 1;
+-		m = (parity) ? hstartcol : (numrows - hstartcol);
++		hstartrow = (numrows + 1 - parity) >> 1;
++		m = (parity) ? hstartrow : (numrows - hstartrow);
++
+ 		/* Save the samples destined for the highpass channel. */
+ 		n = m;
+ 		dstptr = buf;
+@@ -404,7 +405,7 @@
+ 			srcptr += stride << 1;
+ 		}
+ 		/* Copy the saved samples into the highpass channel. */
+-		dstptr = &a[hstartcol * stride];
++		dstptr = &a[hstartrow * stride];
+ 		srcptr = buf;
+ 		n = m;
+ 		while (n-- > 0) {
+@@ -435,19 +436,20 @@
+ 	register int n;
+ 	register int i;
+ 	int m;
+-	int hstartcol;
++	int hstartrow;
+ 
+ 	/* Get a buffer. */
+ 	if (bufsize > QMFB_SPLITBUFSIZE) {
+-		if (!(buf = jas_alloc2(bufsize, sizeof(jpc_fix_t)))) {
++                if (!(buf = jas_alloc3(bufsize, JPC_QMFB_COLGRPSIZE, sizeof(jpc_fix_t)))) {
+ 			/* We have no choice but to commit suicide in this case. */
+ 			abort();
+ 		}
+ 	}
+ 
+ 	if (numrows >= 2) {
+-		hstartcol = (numrows + 1 - parity) >> 1;
+-		m = (parity) ? hstartcol : (numrows - hstartcol);
++		hstartrow = (numrows + 1 - parity) >> 1;
++		m = (parity) ? hstartrow : (numrows - hstartrow);
++
+ 		/* Save the samples destined for the highpass channel. */
+ 		n = m;
+ 		dstptr = buf;
+@@ -479,7 +481,7 @@
+ 			srcptr += stride << 1;
+ 		}
+ 		/* Copy the saved samples into the highpass channel. */
+-		dstptr = &a[hstartcol * stride];
++		dstptr = &a[hstartrow * stride];
+ 		srcptr = buf;
+ 		n = m;
+ 		while (n-- > 0) {
+@@ -520,7 +522,7 @@
+ 
+ 	/* Get a buffer. */
+ 	if (bufsize > QMFB_SPLITBUFSIZE) {
+-		if (!(buf = jas_alloc2(bufsize, sizeof(jpc_fix_t)))) {
++		if (!(buf = jas_alloc3(bufsize, numcols, sizeof(jpc_fix_t)))) {
+ 			/* We have no choice but to commit suicide in this case. */
+ 			abort();
+ 		}
+diff -Naur jasper-1.900.1-debian1.orig/src/libjasper/jpc/jpc_t2cod.c jasper-1.900.1-debian1/src/libjasper/jpc/jpc_t2cod.c
+--- jasper-1.900.1-debian1.orig/src/libjasper/jpc/jpc_t2cod.c	2017-02-07 22:46:28.000000000 +0100
++++ jasper-1.900.1-debian1/src/libjasper/jpc/jpc_t2cod.c	2017-02-07 22:45:54.464331040 +0100
+@@ -429,7 +429,7 @@
+ 	}
+ 
+ 	for (pi->compno = pchg->compnostart, pi->picomp =
+-	  &pi->picomps[pi->compno]; pi->compno < JAS_CAST(int, pchg->compnoend); ++pi->compno,
++	  &pi->picomps[pi->compno]; pi->compno < JAS_CAST(int, pchg->compnoend) && pi->compno < pi->numcomps; ++pi->compno,
+ 	  ++pi->picomp) {
+ 		pirlvl = pi->picomp->pirlvls;
+ 		pi->xstep = pi->picomp->hsamp * (1 << (pirlvl->prcwidthexpn +
+From 03fe49ab96bf65fea784cdc256507ea88267fc7c Mon Sep 17 00:00:00 2001
+From: Michael Adams <mdadams@ece.uvic.ca>
+Date: Thu, 2 Mar 2017 08:07:04 -0800
+Subject: [PATCH] Fixed some potential double-free problems in the JPC codec.
+
+---
+ src/libjasper/jpc/jpc_enc.c | 75 +++++++++++++++++++++++++++++++++++++--------
+ 1 file changed, 62 insertions(+), 13 deletions(-)
+
+diff --git a/src/libjasper/jpc/jpc_enc.c b/src/libjasper/jpc/jpc_enc.c
+index 03646d6..b8b47f1 100644
+--- a/src/libjasper/jpc/jpc_enc.c
++++ b/src/libjasper/jpc/jpc_enc.c
+@@ -1140,8 +1140,9 @@ static int jpc_enc_encodemainbody(jpc_enc_t *enc)
+ 		tilex = tileno % cp->numhtiles;
+ 		tiley = tileno / cp->numhtiles;
+ 
+-		if (!(enc->curtile = jpc_enc_tile_create(enc->cp, enc->image, tileno))) {
+-			abort();
++		if (!(enc->curtile = jpc_enc_tile_create(enc->cp, enc->image,
++		  tileno))) {
++			return -1;
+ 		}
+ 
+ 		tile = enc->curtile;
+@@ -2036,6 +2037,8 @@ jpc_enc_tile_t *jpc_enc_tile_create(jpc_enc_cp_t *cp, jas_image_t *image, int ti
+ 	return 0;
+ }
+ 
++/* Note: I don't think that it is necessary to marked destroyed subobjects
++as such in this function. */
+ void jpc_enc_tile_destroy(jpc_enc_tile_t *tile)
+ {
+ 	jpc_enc_tcmpt_t *tcmpt;
+@@ -2047,16 +2050,21 @@ void jpc_enc_tile_destroy(jpc_enc_tile_t *tile)
+ 			tcmpt_destroy(tcmpt);
+ 		}
+ 		jas_free(tile->tcmpts);
++		/* tile->tcmpts = NULL; */
+ 	}
+ 	if (tile->lyrsizes) {
+ 		jas_free(tile->lyrsizes);
++		/* tile->lyrsizes = NULL; */
+ 	}
+ 	if (tile->pi) {
+ 		jpc_pi_destroy(tile->pi);
++		/* tile->pi = NULL; */
+ 	}
+ 	jas_free(tile);
++	/* tile = NULL; */
+ }
+ 
++/* Note: This constructor creates the object in place. */
+ static jpc_enc_tcmpt_t *tcmpt_create(jpc_enc_tcmpt_t *tcmpt, jpc_enc_cp_t *cp,
+   jas_image_t *image, jpc_enc_tile_t *tile)
+ {
+@@ -2152,6 +2160,10 @@ static jpc_enc_tcmpt_t *tcmpt_create(jpc_enc_tcmpt_t *tcmpt, jpc_enc_cp_t *cp,
+ 
+ }
+ 
++/* Note: Since jpc_enc_tcmpt_t objects are created in-place, they might
++potentially be destroyed multiple times at different levels in the call
++chain.  So, destroyed subobjects must be marked as destroyed to prevent
++problems such as double frees. */
+ static void tcmpt_destroy(jpc_enc_tcmpt_t *tcmpt)
+ {
+ 	jpc_enc_rlvl_t *rlvl;
+@@ -2163,16 +2175,20 @@ static void tcmpt_destroy(jpc_enc_tcmpt_t *tcmpt)
+ 			rlvl_destroy(rlvl);
+ 		}
+ 		jas_free(tcmpt->rlvls);
++		tcmpt->rlvls = NULL;
+ 	}
+ 
+ 	if (tcmpt->data) {
+ 		jas_seq2d_destroy(tcmpt->data);
++		tcmpt->data = NULL;
+ 	}
+ 	if (tcmpt->tsfb) {
+ 		jpc_tsfb_destroy(tcmpt->tsfb);
++		tcmpt->tsfb = NULL;
+ 	}
+ }
+ 
++/* Note: This constructor creates the object in place. */
+ static jpc_enc_rlvl_t *rlvl_create(jpc_enc_rlvl_t *rlvl, jpc_enc_cp_t *cp,
+   jpc_enc_tcmpt_t *tcmpt, jpc_tsfb_band_t *bandinfos)
+ {
+@@ -2254,6 +2270,10 @@ static jpc_enc_rlvl_t *rlvl_create(jpc_enc_rlvl_t *rlvl, jpc_enc_cp_t *cp,
+ 	return 0;
+ }
+ 
++/* Note: Since jpc_enc_rlvl_t objects are created in-place, they might
++potentially be destroyed multiple times at different levels in the call
++chain.  So, destroyed subobjects must be marked as destroyed to prevent
++problems such as double frees. */
+ static void rlvl_destroy(jpc_enc_rlvl_t *rlvl)
+ {
+ 	jpc_enc_band_t *band;
+@@ -2265,9 +2285,11 @@ static void rlvl_destroy(jpc_enc_rlvl_t *rlvl)
+ 			band_destroy(band);
+ 		}
+ 		jas_free(rlvl->bands);
++		rlvl->bands = NULL;
+ 	}
+ }
+ 
++/* Note: This constructor creates the object in place. */
+ static jpc_enc_band_t *band_create(jpc_enc_band_t *band, jpc_enc_cp_t *cp,
+   jpc_enc_rlvl_t *rlvl, jpc_tsfb_band_t *bandinfos)
+ {
+@@ -2335,6 +2357,10 @@ if (band->data) {
+ 	return 0;
+ }
+ 
++/* Note: Since jpc_enc_band_t objects are created in-place, they might
++potentially be destroyed multiple times at different levels in the call
++chain.  So, destroyed subobjects must be marked as destroyed to prevent
++problems such as double frees. */
+ static void band_destroy(jpc_enc_band_t *band)
+ {
+ 	jpc_enc_prc_t *prc;
+@@ -2348,12 +2374,15 @@ static void band_destroy(jpc_enc_band_t *band)
+ 			prc_destroy(prc);
+ 		}
+ 		jas_free(band->prcs);
++		band->prcs = NULL;
+ 	}
+ 	if (band->data) {
+ 		jas_seq2d_destroy(band->data);
++		band->data = NULL;
+ 	}
+ }
+ 
++/* Note: This constructor creates the object in place. */
+ static jpc_enc_prc_t *prc_create(jpc_enc_prc_t *prc, jpc_enc_cp_t *cp, jpc_enc_band_t *band)
+ {
+ 	uint_fast32_t prcno;
+@@ -2383,21 +2412,21 @@ static jpc_enc_prc_t *prc_create(jpc_enc_prc_t *prc, jpc_enc_cp_t *cp, jpc_enc_b
+ 
+ 	rlvl = band->rlvl;
+ 	tcmpt = rlvl->tcmpt;
+-rlvlno = rlvl - tcmpt->rlvls;
++	rlvlno = rlvl - tcmpt->rlvls;
+ 	prcno = prc - band->prcs;
+ 	prcxind = prcno % rlvl->numhprcs;
+ 	prcyind = prcno / rlvl->numhprcs;
+ 	prc->band = band;
+ 
+-tlprctlx = JPC_FLOORTOMULTPOW2(rlvl->tlx, rlvl->prcwidthexpn);
+-tlprctly = JPC_FLOORTOMULTPOW2(rlvl->tly, rlvl->prcheightexpn);
+-if (!rlvlno) {
+-	tlcbgtlx = tlprctlx;
+-	tlcbgtly = tlprctly;
+-} else {
+-	tlcbgtlx = JPC_CEILDIVPOW2(tlprctlx, 1);
+-	tlcbgtly = JPC_CEILDIVPOW2(tlprctly, 1);
+-}
++	tlprctlx = JPC_FLOORTOMULTPOW2(rlvl->tlx, rlvl->prcwidthexpn);
++	tlprctly = JPC_FLOORTOMULTPOW2(rlvl->tly, rlvl->prcheightexpn);
++	if (!rlvlno) {
++		tlcbgtlx = tlprctlx;
++		tlcbgtly = tlprctly;
++	} else {
++		tlcbgtlx = JPC_CEILDIVPOW2(tlprctlx, 1);
++		tlcbgtly = JPC_CEILDIVPOW2(tlprctly, 1);
++	}
+ 
+ 	/* Compute the coordinates of the top-left and bottom-right
+ 	  corners of the precinct. */
+@@ -2479,6 +2508,10 @@ if (!rlvlno) {
+ 	return 0;
+ }
+ 
++/* Note: Since jpc_enc_prc_t objects are created in-place, they might
++potentially be destroyed multiple times at different levels in the call
++chain.  So, destroyed subobjects must be marked as destroyed to prevent
++problems such as double frees. */
+ static void prc_destroy(jpc_enc_prc_t *prc)
+ {
+ 	jpc_enc_cblk_t *cblk;
+@@ -2490,22 +2523,29 @@ static void prc_destroy(jpc_enc_prc_t *prc)
+ 			cblk_destroy(cblk);
+ 		}
+ 		jas_free(prc->cblks);
++		prc->cblks = NULL;
+ 	}
+ 	if (prc->incltree) {
+ 		jpc_tagtree_destroy(prc->incltree);
++		prc->incltree = NULL;
+ 	}
+ 	if (prc->nlibtree) {
+ 		jpc_tagtree_destroy(prc->nlibtree);
++		prc->nlibtree = NULL;
+ 	}
+ 	if (prc->savincltree) {
+ 		jpc_tagtree_destroy(prc->savincltree);
++		prc->savincltree = NULL;
+ 	}
+ 	if (prc->savnlibtree) {
+ 		jpc_tagtree_destroy(prc->savnlibtree);
++		prc->savnlibtree = NULL;
+ 	}
+ }
+ 
+-static jpc_enc_cblk_t *cblk_create(jpc_enc_cblk_t *cblk, jpc_enc_cp_t *cp, jpc_enc_prc_t *prc)
++/* Note: This constructor creates the object in place. */
++static jpc_enc_cblk_t *cblk_create(jpc_enc_cblk_t *cblk, jpc_enc_cp_t *cp,
++  jpc_enc_prc_t *prc)
+ {
+ 	jpc_enc_band_t *band;
+ 	uint_fast32_t cblktlx;
+@@ -2563,6 +2603,10 @@ static jpc_enc_cblk_t *cblk_create(jpc_enc_cblk_t *cblk, jpc_enc_cp_t *cp, jpc_e
+ 	return 0;
+ }
+ 
++/* Note: Since jpc_enc_cblk_t objects are created in-place, they might
++potentially be destroyed multiple times at different levels in the call
++chain.  So, destroyed subobjects must be marked as destroyed to prevent
++problems such as double frees. */
+ static void cblk_destroy(jpc_enc_cblk_t *cblk)
+ {
+ 	uint_fast16_t passno;
+@@ -2573,18 +2617,23 @@ static void cblk_destroy(jpc_enc_cblk_t *cblk)
+ 			pass_destroy(pass);
+ 		}
+ 		jas_free(cblk->passes);
++		cblk->passes = NULL;
+ 	}
+ 	if (cblk->stream) {
+ 		jas_stream_close(cblk->stream);
++		cblk->stream = NULL;
+ 	}
+ 	if (cblk->mqenc) {
+ 		jpc_mqenc_destroy(cblk->mqenc);
++		cblk->mqenc = NULL;
+ 	}
+ 	if (cblk->data) {
+ 		jas_seq2d_destroy(cblk->data);
++		cblk->data = NULL;
+ 	}
+ 	if (cblk->flags) {
+ 		jas_seq2d_destroy(cblk->flags);
++		cblk->flags = NULL;
+ 	}
+ }
+ 
+Backport of  988f8365f7d8ad8073b6786e433d34c553ecf568
+From: Michael Adams <mdadams@ece.uvic.ca>
+
+Also backport jas_safe_size_mul()
+
+diff -aur jasper-1.900.1-debian1.orig/src/libjasper/base/jas_seq.c jasper-1.900.1-debian1/src/libjasper/base/jas_seq.c
+--- jasper-1.900.1-debian1.orig/src/libjasper/base/jas_seq.c	2017-03-15 16:30:46.000000000 +0100
++++ jasper-1.900.1-debian1/src/libjasper/base/jas_seq.c	2017-03-15 16:36:57.410704785 +0100
+@@ -101,9 +101,16 @@
+ {
+ 	jas_matrix_t *matrix;
+ 	int i;
++	size_t size;
+ 
++	matrix = 0;
++
++  	if (numrows < 0 || numcols < 0) {
++		goto error;
++ 	}
++ 
+ 	if (!(matrix = jas_malloc(sizeof(jas_matrix_t)))) {
+-		return 0;
++		goto error;
+ 	}
+ 	matrix->flags_ = 0;
+ 	matrix->numrows_ = numrows;
+@@ -111,21 +118,25 @@
+ 	matrix->rows_ = 0;
+ 	matrix->maxrows_ = numrows;
+ 	matrix->data_ = 0;
+-	matrix->datasize_ = numrows * numcols;
++	matrix->datasize_ = 0;
++
++	// matrix->datasize_ = numrows * numcols;
++	if (!jas_safe_size_mul(numrows, numcols, &size)) {
++		goto error;
++	}
++	matrix->datasize_ = size;
+ 
+ 	if (matrix->maxrows_ > 0) {
+ 		if (!(matrix->rows_ = jas_alloc2(matrix->maxrows_,
+ 		  sizeof(jas_seqent_t *)))) {
+-			jas_matrix_destroy(matrix);
+-			return 0;
++			goto error;
+ 		}
+ 	}
+ 
+ 	if (matrix->datasize_ > 0) {
+ 		if (!(matrix->data_ = jas_alloc2(matrix->datasize_,
+ 		  sizeof(jas_seqent_t)))) {
+-			jas_matrix_destroy(matrix);
+-			return 0;
++			goto error;
+ 		}
+ 	}
+ 
+@@ -143,6 +154,12 @@
+ 	matrix->yend_ = matrix->numrows_;
+ 
+ 	return matrix;
++
++error:
++	if (matrix) {
++		jas_matrix_destroy(matrix);
++	}
++	return 0;
+ }
+ 
+ void jas_matrix_destroy(jas_matrix_t *matrix)
+--- jasper-1.900.1.orig/src/libjasper/include/jasper/jas_math.h	2016-11-30 15:16:36.376026487 +0100
++++ jasper-1.900.1/src/libjasper/include/jasper/jas_math.h	2016-11-30 15:17:11.011071690 +0100
+@@ -79,6 +79,7 @@
+ #include	<assert.h>
+ #include	<stdio.h>
+ #include	<string.h>
++#include <stdint.h>
+ 
+ #ifdef __cplusplus
+ extern "C" {
+@@ -110,6 +111,19 @@
+ #define	JAS_ONES(n) \
+   ((1 << (n)) - 1)
+ 
++inline static int jas_safe_size_mul(size_t x, size_t y, size_t *result)
++{
++        /* Check if overflow would occur */
++        if (x && y > SIZE_MAX / x) {
++                /* Overflow would occur. */
++                return 0;
++        }
++        if (result) {
++                *result = x * y;
++        }
++        return 1;
++}
++
+ #ifdef __cplusplus
+ }
+ #endif
+From 1f0dfe5a42911b6880a1445f13f6d615ddb55387 Mon Sep 17 00:00:00 2001
+From: Michael Adams <mdadams@ece.uvic.ca>
+Date: Fri, 4 Nov 2016 07:20:23 -0700
+Subject: [PATCH] Fixed an integer overflow problem in the JPC codec that later
+ resulted in the use of uninitialized data.
+
+---
+ src/libjasper/jpc/jpc_t2cod.c | 20 ++++++++++----------
+ src/libjasper/jpc/jpc_t2cod.h | 20 ++++++++++----------
+ 2 files changed, 20 insertions(+), 20 deletions(-)
+
+diff --git a/src/libjasper/jpc/jpc_t2cod.c b/src/libjasper/jpc/jpc_t2cod.c
+index 08315dd..174442a 100644
+--- a/src/libjasper/jpc/jpc_t2cod.c
++++ b/src/libjasper/jpc/jpc_t2cod.c
+@@ -432,18 +432,18 @@ static int jpc_pi_nextcprl(register jpc_pi_t *pi)
+ 	  &pi->picomps[pi->compno]; pi->compno < JAS_CAST(int, pchg->compnoend) && pi->compno < pi->numcomps; ++pi->compno,
+ 	  ++pi->picomp) {
+ 		pirlvl = pi->picomp->pirlvls;
+-		pi->xstep = pi->picomp->hsamp * (1 << (pirlvl->prcwidthexpn +
+-		  pi->picomp->numrlvls - 1));
+-		pi->ystep = pi->picomp->vsamp * (1 << (pirlvl->prcheightexpn +
+-		  pi->picomp->numrlvls - 1));
++		pi->xstep = pi->picomp->hsamp * (JAS_CAST(uint_fast32_t, 1) <<
++		  (pirlvl->prcwidthexpn + pi->picomp->numrlvls - 1));
++		pi->ystep = pi->picomp->vsamp * (JAS_CAST(uint_fast32_t, 1) <<
++		  (pirlvl->prcheightexpn + pi->picomp->numrlvls - 1));
+ 		for (rlvlno = 1, pirlvl = &pi->picomp->pirlvls[1];
+ 		  rlvlno < pi->picomp->numrlvls; ++rlvlno, ++pirlvl) {
+-			pi->xstep = JAS_MIN(pi->xstep, pi->picomp->hsamp * (1 <<
+-			  (pirlvl->prcwidthexpn + pi->picomp->numrlvls -
+-			  rlvlno - 1)));
+-			pi->ystep = JAS_MIN(pi->ystep, pi->picomp->vsamp * (1 <<
+-			  (pirlvl->prcheightexpn + pi->picomp->numrlvls -
+-			  rlvlno - 1)));
++			pi->xstep = JAS_MIN(pi->xstep, pi->picomp->hsamp *
++			  (JAS_CAST(uint_fast32_t, 1) << (pirlvl->prcwidthexpn +
++			  pi->picomp->numrlvls - rlvlno - 1)));
++			pi->ystep = JAS_MIN(pi->ystep, pi->picomp->vsamp *
++			  (JAS_CAST(uint_fast32_t, 1) << (pirlvl->prcheightexpn +
++			  pi->picomp->numrlvls - rlvlno - 1)));
+ 		}
+ 		for (pi->y = pi->ystart; pi->y < pi->yend;
+ 		  pi->y += pi->ystep - (pi->y % pi->ystep)) {
+diff --git a/src/libjasper/jpc/jpc_t2cod.h b/src/libjasper/jpc/jpc_t2cod.h
+index 0a176c9..690e031 100644
+--- a/src/libjasper/jpc/jpc_t2cod.h
++++ b/src/libjasper/jpc/jpc_t2cod.h
+@@ -129,10 +129,10 @@ typedef struct {
+ 	jpc_pirlvl_t *pirlvls;
+ 
+ 	/* The horizontal sampling period. */
+-	int hsamp;
++	uint_fast32_t hsamp;
+ 
+ 	/* The vertical sampling period. */
+-	int vsamp;
++	uint_fast32_t vsamp;
+ 
+ } jpc_picomp_t;
+ 
+@@ -171,32 +171,32 @@ typedef struct {
+ 	int lyrno;
+ 
+ 	/* The x-coordinate of the current position. */
+-	int x;
++	uint_fast32_t x;
+ 
+ 	/* The y-coordinate of the current position. */
+-	int y;
++	uint_fast32_t y;
+ 
+ 	/* The horizontal step size. */
+-	int xstep;
++	uint_fast32_t xstep;
+ 
+ 	/* The vertical step size. */
+-	int ystep;
++	uint_fast32_t ystep;
+ 
+ 	/* The x-coordinate of the top-left corner of the tile on the reference
+ 	  grid. */
+-	int xstart;
++	uint_fast32_t xstart;
+ 
+ 	/* The y-coordinate of the top-left corner of the tile on the reference
+ 	  grid. */
+-	int ystart;
++	uint_fast32_t ystart;
+ 
+ 	/* The x-coordinate of the bottom-right corner of the tile on the
+ 	  reference grid (plus one). */
+-	int xend;
++	uint_fast32_t xend;
+ 
+ 	/* The y-coordinate of the bottom-right corner of the tile on the
+ 	  reference grid (plus one). */
+-	int yend;
++	uint_fast32_t yend;
+ 
+ 	/* The current progression change. */
+ 	jpc_pchg_t *pchg;