From 3065abc7b4f740ed6532322843531317de782a26 Mon Sep 17 00:00:00 2001 From: Thomas Loimer Date: Tue, 10 Dec 2019 13:17:36 +0100 Subject: [PATCH 3/8] Reject huge arrow types, ticket #57 An arrow type being large enough would pass the test for a valid type by integer overflow. --- CHANGES | 1 + fig2dev/arrow.c | 13 ++++++++----- fig2dev/tests/read.at | 12 ++++++++++++ 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/CHANGES b/CHANGES index edd0843..964dc84 100644 --- a/CHANGES +++ b/CHANGES @@ -6,6 +6,7 @@ Patchlevel Xx (Xxx 20xx) BUGS FIXED: Ticket numbers refer to https://sourceforge.net/p/mcj/tickets/#. + o Reject huge arrow types causing integer overflow. Ticket #57. o Allow Fig v2 text strings ending with multiple ^A. Ticket #55. o Embed images in pdfs with their original compression type, i.e., leave the gs switch "-dAutoFilterColorImages" at its default value "true". diff --git a/fig2dev/arrow.c b/fig2dev/arrow.c index a8e7fd0..34bcf18 100644 --- a/fig2dev/arrow.c +++ b/fig2dev/arrow.c @@ -1,9 +1,10 @@ /* * Fig2dev: Translate Fig code to various Devices - * Copyright (c) 1985 by Supoj Sutantavibul * Copyright (c) 1991 by Micah Beck - * Parts Copyright (c) 1989-2002 by Brian V. Smith - * Parts Copyright (c) 2015-2018 by Thomas Loimer + * Parts Copyright (c) 1985-1988 by Supoj Sutanthavibul + * Parts Copyright (c) 1989-2015 by Brian V. Smith + * Parts Copyright (c) 2015-2019 by Thomas Loimer + * * * Any party obtaining a copy of these files is granted, free of charge, a * full and unrestricted irrevocable, world-wide, paid up, royalty-free, @@ -78,7 +79,9 @@ make_arrow(int type, int style, double thickness, double wid, double ht) { F_arrow *a; - if (style < 0 || style > 1 || type < 0 || (type + 1) * 2 > NUMARROWS) + if (style < 0 || style > 1 || type < 0 || + /* beware of int overflow */ + type > NUMARROWS || (type + 1) * 2 > NUMARROWS) return NULL; if (NULL == (Arrow_malloc(a))) { put_msg(Err_mem); @@ -90,7 +93,7 @@ make_arrow(int type, int style, double thickness, double wid, double ht) a->type = type; a->style = style; - a->thickness = thickness*THICK_SCALE; + a->thickness = thickness * THICK_SCALE; a->wid = wid; a->ht = ht; return a; diff --git a/fig2dev/tests/read.at b/fig2dev/tests/read.at index c36d07a..e9a71a3 100644 --- a/fig2dev/tests/read.at +++ b/fig2dev/tests/read.at @@ -135,6 +135,18 @@ A single point with a backward arrow - remove the arrow. ]) AT_CLEANUP +AT_SETUP([reject huge arrow-type, ticket #57]) +AT_KEYWORDS(arrow.c arrow) +AT_CHECK([fig2dev -L box <