summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Johnson <ajohnson@redneon.com>2012-10-30 19:23:30 +1030
committerAdrian Johnson <ajohnson@redneon.com>2012-10-30 19:23:30 +1030
commit0c800dc3f64ee030df1cd0a6a1dcd6df71502dea (patch)
tree6117393c982e028f928e39156bf2cf006c60cca0
parent5a6e1d680a5bf1c4091e74f999abd611abd92334 (diff)
downloadcairo-0c800dc3f64ee030df1cd0a6a1dcd6df71502dea.tar.gz
type1-subset: ensure subroutine numnber is an integer
-rw-r--r--src/cairo-type1-subset.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/cairo-type1-subset.c b/src/cairo-type1-subset.c
index 786055a3b..dff4a953e 100644
--- a/src/cairo-type1-subset.c
+++ b/src/cairo-type1-subset.c
@@ -827,15 +827,18 @@ cairo_type1_font_subset_parse_charstring (cairo_type1_font_subset_t *font,
case TYPE1_CHARSTRING_COMMAND_CALLSUBR:
if (font->subset_subrs && font->build_stack.sp > 0) {
- int subr_num = font->build_stack.stack[--font->build_stack.sp];
- if (subr_num >= 0 && subr_num < font->num_subrs) {
- font->subrs[subr_num].used = TRUE;
- status = cairo_type1_font_subset_parse_charstring (
- font,
- glyph,
- font->subrs[subr_num].subr_string,
- font->subrs[subr_num].subr_length);
- break;
+ double int_val;
+ if (modf(font->build_stack.stack[--font->build_stack.sp], &int_val) == 0.0) {
+ int subr_num = int_val;
+ if (subr_num >= 0 && subr_num < font->num_subrs) {
+ font->subrs[subr_num].used = TRUE;
+ status = cairo_type1_font_subset_parse_charstring (
+ font,
+ glyph,
+ font->subrs[subr_num].subr_string,
+ font->subrs[subr_num].subr_length);
+ break;
+ }
}
}
font->subset_subrs = FALSE;