From 1d4c6ebe5feae2566e005d260cc8a6f4285c7419 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 8 Jan 2010 13:20:28 -0500 Subject: [PATCH] Avoid an FPE for ludicrous scale values ...just bail out early. --- gdk-pixbuf/pixops/pixops.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/gdk-pixbuf/pixops/pixops.c b/gdk-pixbuf/pixops/pixops.c index 513d16fc8b..353021aad3 100644 --- a/gdk-pixbuf/pixops/pixops.c +++ b/gdk-pixbuf/pixops/pixops.c @@ -1251,11 +1251,20 @@ pixops_process (guchar *dest_buf, int i, j; int x, y; /* X and Y position in source (fixed_point) */ - guchar **line_bufs = g_new (guchar *, filter->y.n); - int *filter_weights = make_filter_table (filter); + guchar **line_bufs; + int *filter_weights; - int x_step = (1 << SCALE_SHIFT) / scale_x; /* X step in source (fixed point) */ - int y_step = (1 << SCALE_SHIFT) / scale_y; /* Y step in source (fixed point) */ + int x_step; + int y_step; + + x_step = (1 << SCALE_SHIFT) / scale_x; /* X step in source (fixed point) */ + y_step = (1 << SCALE_SHIFT) / scale_y; /* Y step in source (fixed point) */ + + if (x_step == 0 || y_step == 0) + return; /* overflow, bail out */ + + line_bufs = g_new (guchar *, filter->y.n); + filter_weights = make_filter_table (filter); int check_shift = check_size ? get_check_shift (check_size) : 0;