Package: mupdf / 1.5-1

0005-Fix-unsafe-conversion-from-float-to-fz_linecap.patch Patch series | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
From: =?utf-8?q?=22Kan-Ru_Chen_=28=E9=99=B3=E4=BE=83=E5=A6=82=29=22?=
 <koster@debian.org>
Date: Sat, 20 Sep 2014 20:15:19 +0800
Subject: Fix unsafe conversion from float to fz_linecap

---
 source/pdf/pdf-op-run.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/source/pdf/pdf-op-run.c b/source/pdf/pdf-op-run.c
index da881b2..629343c 100644
--- a/source/pdf/pdf-op-run.c
+++ b/source/pdf/pdf-op-run.c
@@ -2000,12 +2000,19 @@ static void pdf_run_J(pdf_csi *csi, void *state)
 {
 	pdf_run_state *pr = (pdf_run_state *)state;
 	pdf_gstate *gstate = pr->gstate + pr->gtop;
+	fz_context *ctx = pr->ctx;
+	int linecap;
 
 	pr->dev->flags &= ~(FZ_DEVFLAG_STARTCAP_UNDEFINED | FZ_DEVFLAG_DASHCAP_UNDEFINED | FZ_DEVFLAG_ENDCAP_UNDEFINED);
 	gstate->stroke_state = fz_unshare_stroke_state(csi->doc->ctx, gstate->stroke_state);
-	gstate->stroke_state->start_cap = csi->stack[0];
-	gstate->stroke_state->dash_cap = csi->stack[0];
-	gstate->stroke_state->end_cap = csi->stack[0];
+
+	linecap = (int) csi->stack[0];
+	if (linecap < FZ_LINECAP_BUTT || linecap > FZ_LINECAP_TRIANGLE)
+		fz_throw(ctx, FZ_ERROR_GENERIC, "Invalid linecap %d", linecap);
+
+	gstate->stroke_state->start_cap = linecap;
+	gstate->stroke_state->dash_cap = linecap;
+	gstate->stroke_state->end_cap = linecap;
 }
 
 static void pdf_run_K(pdf_csi *csi, void *state)