michael@0: diff --git a/gfx/cairo/cairo/src/cairo-ft-font.c b/gfx/cairo/cairo/src/cairo-ft-font.c michael@0: --- a/gfx/cairo/cairo/src/cairo-ft-font.c michael@0: +++ b/gfx/cairo/cairo/src/cairo-ft-font.c michael@0: @@ -63,6 +63,10 @@ michael@0: /* This is the max number of FT_face objects we keep open at once michael@0: */ michael@0: #define MAX_OPEN_FACES 10 michael@0: + michael@0: +/* This is the maximum font size we allow to be passed to FT_Set_Char_Size michael@0: + */ michael@0: +#define MAX_FONT_SIZE 1000 michael@0: michael@0: /* michael@0: * The simple 2x2 matrix is converted into separate scale and shape michael@0: @@ -682,9 +686,11 @@ _cairo_ft_unscaled_font_set_scale (cairo michael@0: FT_Set_Transform(unscaled->face, &mat, NULL); michael@0: michael@0: if ((unscaled->face->face_flags & FT_FACE_FLAG_SCALABLE) != 0) { michael@0: + double x_scale = MIN(sf.x_scale, MAX_FONT_SIZE); michael@0: + double y_scale = MIN(sf.y_scale, MAX_FONT_SIZE); michael@0: error = FT_Set_Char_Size (unscaled->face, michael@0: - sf.x_scale * 64.0 + .5, michael@0: - sf.y_scale * 64.0 + .5, michael@0: + x_scale * 64.0 + .5, michael@0: + y_scale * 64.0 + .5, michael@0: 0, 0); michael@0: if (error) michael@0: return _cairo_error (CAIRO_STATUS_NO_MEMORY);