Blame SOURCES/jasper-CVE-2016-10249.patch

83be9e
Backport of the upstream commit:
83be9e
83be9e
From 988f8365f7d8ad8073b6786e433d34c553ecf568 Mon Sep 17 00:00:00 2001
83be9e
From: Michael Adams <mdadams@ece.uvic.ca>
83be9e
Date: Sat, 22 Oct 2016 14:36:49 -0700
83be9e
Subject: [PATCH] Fixed an integer overflow problem.
83be9e
83be9e
Further enhanced by an explicit check to ensure that size not only fits into
83be9e
size_t, but that it also does not exceed INT_FAST32_MAX (the type of
83be9e
matrix->datasize_).  This is similar approach to what upstream used in
83be9e
a712a2041085e7cd5f2b153e1532ac2a2954ffaa.
83be9e
83be9e
diff -pruN jasper-1.900.1.orig/src/libjasper/base/jas_seq.c jasper-1.900.1/src/libjasper/base/jas_seq.c
83be9e
--- jasper-1.900.1.orig/src/libjasper/base/jas_seq.c	2017-03-31 15:02:01.000000000 +0200
83be9e
+++ jasper-1.900.1/src/libjasper/base/jas_seq.c	2017-03-31 15:41:17.527623038 +0200
83be9e
@@ -101,13 +101,16 @@ jas_matrix_t *jas_matrix_create(int numr
83be9e
 {
83be9e
 	jas_matrix_t *matrix;
83be9e
 	int i;
83be9e
+	size_t size;
83be9e
+
83be9e
+	matrix = 0;
83be9e
 
83be9e
 	if (numrows < 0 || numcols < 0) {
83be9e
-		return 0;
83be9e
+		goto error;
83be9e
 	}
83be9e
 
83be9e
 	if (!(matrix = jas_malloc(sizeof(jas_matrix_t)))) {
83be9e
-		return 0;
83be9e
+		goto error;
83be9e
 	}
83be9e
 	matrix->flags_ = 0;
83be9e
 	matrix->numrows_ = numrows;
83be9e
@@ -115,21 +118,25 @@ jas_matrix_t *jas_matrix_create(int numr
83be9e
 	matrix->rows_ = 0;
83be9e
 	matrix->maxrows_ = numrows;
83be9e
 	matrix->data_ = 0;
83be9e
-	matrix->datasize_ = numrows * numcols;
83be9e
+	matrix->datasize_ = 0;
83be9e
+
83be9e
+	// matrix->datasize_ = numrows * numcols;
83be9e
+	if (!jas_safe_size_mul(numrows, numcols, &size) || size > INT_FAST32_MAX) {
83be9e
+		goto error;
83be9e
+	}
83be9e
+	matrix->datasize_ = size;
83be9e
 
83be9e
 	if (matrix->maxrows_ > 0) {
83be9e
 		if (!(matrix->rows_ = jas_alloc2(matrix->maxrows_,
83be9e
 		  sizeof(jas_seqent_t *)))) {
83be9e
-			jas_matrix_destroy(matrix);
83be9e
-			return 0;
83be9e
+			goto error;
83be9e
 		}
83be9e
 	}
83be9e
 
83be9e
 	if (matrix->datasize_ > 0) {
83be9e
 		if (!(matrix->data_ = jas_alloc2(matrix->datasize_,
83be9e
 		  sizeof(jas_seqent_t)))) {
83be9e
-			jas_matrix_destroy(matrix);
83be9e
-			return 0;
83be9e
+			goto error;
83be9e
 		}
83be9e
 	}
83be9e
 
83be9e
@@ -147,6 +154,12 @@ jas_matrix_t *jas_matrix_create(int numr
83be9e
 	matrix->yend_ = matrix->numrows_;
83be9e
 
83be9e
 	return matrix;
83be9e
+
83be9e
+error:
83be9e
+	if (matrix) {
83be9e
+		jas_matrix_destroy(matrix);
83be9e
+	}
83be9e
+	return 0;
83be9e
 }
83be9e
 
83be9e
 void jas_matrix_destroy(jas_matrix_t *matrix)