Hello dear maintainer(s), the Debian LTS team would like to fix the security issues which are currently open in the Squeeze version of gtk+2.0 and relate to gdk-pixbuf: https://security-tracker.debian.org/tracker/source-package/gtk+2.0
A user have noticed me about these issues, originally filed against, and I have already prepared a package (debdiff attached), backporting the patches from wheezy's gdk-pixbuf. Could you please take a look on it? Would you like to finish the upload and prepared the DLA or do you want me to go ahead? Cheers, Santiago
diff -u gtk+2.0-2.20.1/debian/changelog gtk+2.0-2.20.1/debian/changelog --- gtk+2.0-2.20.1/debian/changelog +++ gtk+2.0-2.20.1/debian/changelog @@ -1,3 +1,16 @@ +gtk+2.0 (2.20.1-2+deb6u2) squeeze-lts; urgency=medium + + * Non-maintainer upload by the Squeeze LTS Team. + * Fix CVE-2015-4491: Integer overflow in gdk-pixbuf's pixops/pixops.c + allowed to execute arbitrary code or cause a DoS via crafted bitmaps of + specific size. + * Fix CVE-2015-7673: io-tga.c in gdk-pixbuf was susceptible to a heap + overflow, allowing remote attackers to cause a DoS or execute arbitrary + code via a crafted Truevision TGA (TARGA) file. + * Fix CVE-2015-7674: Heap overflow in gdk-pixbuf when scaling a GIF file. + + -- Santiago Ruano Rincón <santiag...@riseup.net> Mon, 22 Feb 2016 21:54:36 +0100 + gtk+2.0 (2.20.1-2+deb6u1) squeeze-lts; urgency=medium * Non-maintainer upload by the Debian LTS Team. diff -u gtk+2.0-2.20.1/debian/patches/series gtk+2.0-2.20.1/debian/patches/series --- gtk+2.0-2.20.1/debian/patches/series +++ gtk+2.0-2.20.1/debian/patches/series @@ -24,0 +25,6 @@ +CVE-2015-4491.patch +CVE-2015-7673/0003-io-tga-Colormaps-are-always-present-so-always-parse-.patch +CVE-2015-7673/0002-tga-Wrap-TGAColormap-struct-in-its-own-API.patch +CVE-2015-7673/0001-pixops-Fail-make_weights-functions-on-OOM.patch +CVE-2015-7674/0001-pixops-Don-t-overflow-variables-when-shifting-them.patch +CVE-2015-4491-2.patch only in patch2: unchanged: --- gtk+2.0-2.20.1.orig/debian/patches/CVE-2015-4491-2.patch +++ gtk+2.0-2.20.1/debian/patches/CVE-2015-4491-2.patch @@ -0,0 +1,39 @@ +From 8dba67cb4f38d62a47757741ad41e3f245b4a32a Mon Sep 17 00:00:00 2001 +From: Benjamin Otte <o...@redhat.com> +Date: Mon, 17 Aug 2015 18:52:47 +0200 +Subject: [PATCH] pixops: Fix oversight for CVE-2015-4491 + +The n_x variable could be made large enough to overflow, too. + +Also included are various testcases for this vulnerability: +- The original exploit (adapted for the testsuite) +- Causing overflow by making both X and Y variables large +- Causing overflow using only the X variable +- Causing overflow using only the Y variable + +https://bugzilla.gnome.org/show_bug.cgi?id=752297 +--- + gdk-pixbuf/pixops/pixops.c | 6 ++- + tests/Makefile.am | 7 ++++ + tests/cve-2015-4491.bmp | Bin 0 -> 82 bytes + tests/cve-2015-4491.c | 87 ++++++++++++++++++++++++++++++++++++++++++ + tests/resources.gresource.xml | 1 + + 5 files changed, 100 insertions(+), 1 deletion(-) + create mode 100644 tests/cve-2015-4491.bmp + create mode 100644 tests/cve-2015-4491.c + +--- a/gdk-pixbuf/pixops/pixops.c ++++ b/gdk-pixbuf/pixops/pixops.c +@@ -1197,7 +1197,11 @@ + gsize n_weights; + int *weights; + +- n_weights = SUBSAMPLE * SUBSAMPLE * n_x * n_y; ++ n_weights = SUBSAMPLE * SUBSAMPLE * n_x; ++ if (n_weights / (SUBSAMPLE * SUBSAMPLE) != n_x) ++ return NULL; /* overflow, bail */ ++ ++ n_weights *= n_y; + if (n_weights / (SUBSAMPLE * SUBSAMPLE * n_x) != n_y) + return NULL; /* overflow, bail */ + only in patch2: unchanged: --- gtk+2.0-2.20.1.orig/debian/patches/CVE-2015-4491.patch +++ gtk+2.0-2.20.1/debian/patches/CVE-2015-4491.patch @@ -0,0 +1,77 @@ +From ffec86ed5010c5a2be14f47b33bcf4ed3169a199 Mon Sep 17 00:00:00 2001 +From: Matthias Clasen <mcla...@redhat.com> +Date: Mon, 13 Jul 2015 00:33:40 -0400 +Subject: pixops: Be more careful about integer overflow + +Our loader code is supposed to handle out-of-memory and overflow +situations gracefully, reporting errors instead of aborting. But +if you load an image at a specific size, we also execute our +scaling code, which was not careful enough about overflow in some +places. + +This commit makes the scaling code silently return if it fails to +allocate filter tables. This is the best we can do, since +gdk_pixbuf_scale() is not taking a GError. + +https://bugzilla.gnome.org/show_bug.cgi?id=752297 + +--- a/gdk-pixbuf/pixops/pixops.c ++++ b/gdk-pixbuf/pixops/pixops.c +@@ -1194,7 +1194,16 @@ + int i_offset, j_offset; + int n_x = filter->x.n; + int n_y = filter->y.n; +- int *weights = g_new (int, SUBSAMPLE * SUBSAMPLE * n_x * n_y); ++ gsize n_weights; ++ int *weights; ++ ++ n_weights = SUBSAMPLE * SUBSAMPLE * n_x * n_y; ++ if (n_weights / (SUBSAMPLE * SUBSAMPLE * n_x) != n_y) ++ return NULL; /* overflow, bail */ ++ ++ weights = g_try_new (int, n_weights); ++ if (!weights) ++ return NULL; /* overflow, bail */ + + for (i_offset=0; i_offset < SUBSAMPLE; i_offset++) + for (j_offset=0; j_offset < SUBSAMPLE; j_offset++) +@@ -1269,8 +1278,11 @@ + 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); ++ if (!filter_weights) ++ return; /* overflow, bail out */ ++ ++ line_bufs = g_new (guchar *, filter->y.n); + + check_shift = check_size ? get_check_shift (check_size) : 0; + +@@ -1390,7 +1402,7 @@ + double scale) + { + int n = ceil (1 / scale + 1); +- double *pixel_weights = g_new (double, SUBSAMPLE * n); ++ double *pixel_weights = g_malloc_n (sizeof (double) * SUBSAMPLE, n); + int offset; + int i; + +@@ -1448,7 +1460,7 @@ + } + + dim->n = n; +- dim->weights = g_new (double, SUBSAMPLE * n); ++ dim->weights = g_malloc_n (sizeof (double) * SUBSAMPLE, n); + + pixel_weights = dim->weights; + +@@ -1539,7 +1551,7 @@ + double scale) + { + int n = ceil (1/scale + 3.0); +- double *pixel_weights = g_new (double, SUBSAMPLE * n); ++ double *pixel_weights = g_malloc_n (sizeof (double) * SUBSAMPLE, n); + double w; + int offset, i; + only in patch2: unchanged: --- gtk+2.0-2.20.1.orig/debian/patches/CVE-2015-7673/0001-pixops-Fail-make_weights-functions-on-OOM.patch +++ gtk+2.0-2.20.1/debian/patches/CVE-2015-7673/0001-pixops-Fail-make_weights-functions-on-OOM.patch @@ -0,0 +1,190 @@ +From 19f9685dbff7d1f929c61cf99188df917a18811d Mon Sep 17 00:00:00 2001 +From: Benjamin Otte <o...@redhat.com> +Date: Sat, 19 Sep 2015 21:24:34 +0200 +Subject: [PATCH] pixops: Fail make_weights functions on OOM + +The weights could grow very large under certain circumstances, in +particular in security-relevant conditions, including the testsuite. +By allowing the weight allocation to fail, this can be worked around. + +https://bugzilla.gnome.org/show_bug.cgi?id=754387 +--- + gdk-pixbuf/pixops/pixops.c | 75 +++++++++++++++++++++++++++++++++------------- + 1 file changed, 55 insertions(+), 20 deletions(-) + +--- a/gdk-pixbuf/pixops/pixops.c ++++ b/gdk-pixbuf/pixops/pixops.c +@@ -1397,15 +1397,19 @@ + /* Compute weights for reconstruction by replication followed by + * sampling with a box filter + */ +-static void ++static gboolean + tile_make_weights (PixopsFilterDimension *dim, + double scale) + { + int n = ceil (1 / scale + 1); +- double *pixel_weights = g_malloc_n (sizeof (double) * SUBSAMPLE, n); ++ double *pixel_weights; + int offset; + int i; + ++ pixel_weights = g_try_malloc_n (sizeof (double) * SUBSAMPLE, n); ++ if (pixel_weights == NULL) ++ return FALSE; ++ + dim->n = n; + dim->offset = 0; + dim->weights = pixel_weights; +@@ -1433,13 +1437,15 @@ + } + } + } ++ ++ return TRUE; + } + + /* Compute weights for a filter that, for minification + * is the same as 'tiles', and for magnification, is bilinear + * reconstruction followed by a sampling with a delta function. + */ +-static void ++static gboolean + bilinear_magnify_make_weights (PixopsFilterDimension *dim, + double scale) + { +@@ -1460,7 +1466,9 @@ + } + + dim->n = n; +- dim->weights = g_malloc_n (sizeof (double) * SUBSAMPLE, n); ++ dim->weights = g_try_malloc_n (sizeof (double) * SUBSAMPLE, n); ++ if (dim->weights == NULL) ++ return FALSE; + + pixel_weights = dim->weights; + +@@ -1500,6 +1508,8 @@ + } + } + } ++ ++ return TRUE; + } + + /* Computes the integral from b0 to b1 of +@@ -1546,15 +1556,19 @@ + /* Compute weights for reconstructing with bilinear + * interpolation, then sampling with a box filter + */ +-static void ++static gboolean + bilinear_box_make_weights (PixopsFilterDimension *dim, + double scale) + { + int n = ceil (1/scale + 3.0); +- double *pixel_weights = g_malloc_n (sizeof (double) * SUBSAMPLE, n); ++ double *pixel_weights; + double w; + int offset, i; + ++ pixel_weights = g_malloc_n (sizeof (double) * SUBSAMPLE, n); ++ if (pixel_weights == NULL) ++ return FALSE; ++ + dim->offset = -1.0; + dim->n = n; + dim->weights = pixel_weights; +@@ -1572,9 +1586,11 @@ + *(pixel_weights++) = w * scale; + } + } ++ ++ return TRUE; + } + +-static void ++static gboolean + make_weights (PixopsFilter *filter, + PixopsInterpType interp_type, + double scale_x, +@@ -1583,23 +1599,39 @@ + switch (interp_type) + { + case PIXOPS_INTERP_NEAREST: ++ default: + g_assert_not_reached (); +- break; ++ return FALSE; + + case PIXOPS_INTERP_TILES: +- tile_make_weights (&filter->x, scale_x); +- tile_make_weights (&filter->y, scale_y); +- break; ++ if (!tile_make_weights (&filter->x, scale_x)) ++ return FALSE; ++ if (!tile_make_weights (&filter->y, scale_y)) ++ { ++ g_free (filter->x.weights); ++ return FALSE; ++ } ++ return TRUE; + + case PIXOPS_INTERP_BILINEAR: +- bilinear_magnify_make_weights (&filter->x, scale_x); +- bilinear_magnify_make_weights (&filter->y, scale_y); +- break; ++ if (!bilinear_magnify_make_weights (&filter->x, scale_x)) ++ return FALSE; ++ if (!bilinear_magnify_make_weights (&filter->y, scale_y)) ++ { ++ g_free (filter->x.weights); ++ return FALSE; ++ } ++ return TRUE; + + case PIXOPS_INTERP_HYPER: +- bilinear_box_make_weights (&filter->x, scale_x); +- bilinear_box_make_weights (&filter->y, scale_y); +- break; ++ if (!bilinear_box_make_weights (&filter->x, scale_x)) ++ return FALSE; ++ if (!bilinear_box_make_weights (&filter->y, scale_y)) ++ { ++ g_free (filter->x.weights); ++ return FALSE; ++ } ++ return TRUE; + } + } + +@@ -1654,7 +1686,8 @@ + } + + filter.overall_alpha = overall_alpha / 255.; +- make_weights (&filter, interp_type, scale_x, scale_y); ++ if (!make_weights (&filter, interp_type, scale_x, scale_y)) ++ return; + + #ifdef USE_MMX + if (filter.x.n == 2 && filter.y.n == 2 && +@@ -1804,7 +1837,8 @@ + } + + filter.overall_alpha = overall_alpha / 255.; +- make_weights (&filter, interp_type, scale_x, scale_y); ++ if (!make_weights (&filter, interp_type, scale_x, scale_y)) ++ return; + + if (filter.x.n == 2 && filter.y.n == 2 && dest_channels == 4 && + src_channels == 4 && src_has_alpha && !dest_has_alpha) +@@ -2211,7 +2245,8 @@ + } + + filter.overall_alpha = 1.0; +- make_weights (&filter, interp_type, scale_x, scale_y); ++ if (!make_weights (&filter, interp_type, scale_x, scale_y)) ++ return; + + if (filter.x.n == 2 && filter.y.n == 2 && dest_channels == 3 && src_channels == 3) + { only in patch2: unchanged: --- gtk+2.0-2.20.1.orig/debian/patches/CVE-2015-7673/0002-tga-Wrap-TGAColormap-struct-in-its-own-API.patch +++ gtk+2.0-2.20.1/debian/patches/CVE-2015-7673/0002-tga-Wrap-TGAColormap-struct-in-its-own-API.patch @@ -0,0 +1,227 @@ +From edf6fb8d856574bc3bb3a703037f56533229267c Mon Sep 17 00:00:00 2001 +From: Benjamin Otte <o...@redhat.com> +Date: Sun, 20 Sep 2015 00:22:42 +0200 +Subject: [PATCH] tga: Wrap TGAColormap struct in its own API + +Instead of poking into it directly. +--- + gdk-pixbuf/io-tga.c | 124 ++++++++++++++++++++++++++++++++++------------------ + 1 file changed, 82 insertions(+), 42 deletions(-) + +--- a/gdk-pixbuf/io-tga.c ++++ b/gdk-pixbuf/io-tga.c +@@ -66,8 +66,8 @@ + typedef struct _TGAHeader TGAHeader; + typedef struct _TGAFooter TGAFooter; + +-typedef struct _TGAColormap TGAColormap; + typedef struct _TGAColor TGAColor; ++typedef struct _TGAColormap TGAColormap; + + typedef struct _TGAContext TGAContext; + +@@ -104,15 +104,15 @@ + } sig; + }; + +-struct _TGAColormap { +- gint size; +- TGAColor *cols; +-}; +- + struct _TGAColor { + guchar r, g, b, a; + }; + ++struct _TGAColormap { ++ guint n_colors; ++ TGAColor colors[1]; ++}; ++ + struct _TGAContext { + TGAHeader *hdr; + guint rowstride; +@@ -237,6 +237,51 @@ + g_free(pixels); + } + ++static TGAColormap * ++colormap_new (guint n_colors) ++{ ++ TGAColormap *cmap; ++ ++ g_assert (n_colors <= G_MAXUINT16); ++ ++ cmap = g_try_malloc0 (sizeof (TGAColormap) + (MAX (n_colors, 1) - 1) * sizeof (TGAColor)); ++ if (cmap == NULL) ++ return NULL; ++ ++ cmap->n_colors = n_colors; ++ ++ return cmap; ++} ++ ++static const TGAColor * ++colormap_get_color (TGAColormap *cmap, ++ guint id) ++{ ++ static const TGAColor transparent_black = { 0, 0, 0, 0 }; ++ ++ if (id >= cmap->n_colors) ++ return &transparent_black; ++ ++ return &cmap->colors[id]; ++} ++ ++static void ++colormap_set_color (TGAColormap *cmap, ++ guint id, ++ const TGAColor *color) ++{ ++ if (id >= cmap->n_colors) ++ return; ++ ++ cmap->colors[id] = *color; ++} ++ ++static void ++colormap_free (TGAColormap *cmap) ++{ ++ g_free (cmap); ++} ++ + static GdkPixbuf *get_contiguous_pixbuf (guint width, + guint height, + gboolean has_alpha) +@@ -371,11 +416,12 @@ + guchar *p = ctx->pptr; + + for (; upper_bound; upper_bound--, s++) { +- *p++ = ctx->cmap->cols[*s].r; +- *p++ = ctx->cmap->cols[*s].g; +- *p++ = ctx->cmap->cols[*s].b; ++ const TGAColor *color = colormap_get_color (ctx->cmap, *s); ++ *p++ = color->r; ++ *p++ = color->g; ++ *p++ = color->b; + if (ctx->hdr->cmap_bpp == 32) +- *p++ = ctx->cmap->cols[*s].a; ++ *p++ = color->a; + } + } + +@@ -442,7 +488,7 @@ + return TRUE; + } + +-static void write_rle_data(TGAContext *ctx, TGAColor *color, guint *rle_count) ++static void write_rle_data(TGAContext *ctx, const TGAColor *color, guint *rle_count) + { + for (; *rle_count; (*rle_count)--) { + g_memmove(ctx->pptr, (guchar *) color, ctx->pbuf->n_channels); +@@ -470,7 +516,7 @@ + return --n; + } else { + rle_num = (tag & 0x7f) + 1; +- write_rle_data(ctx, &ctx->cmap->cols[*s], &rle_num); ++ write_rle_data(ctx, colormap_get_color (ctx->cmap, *s), &rle_num); + s++, n++; + if (ctx->pbuf_bytes_done == ctx->pbuf_bytes) { + ctx->done = TRUE; +@@ -483,14 +529,12 @@ + return --n; + } else { + for (; raw_num; raw_num--) { +- *ctx->pptr++ = +- ctx->cmap->cols[*s].r; +- *ctx->pptr++ = +- ctx->cmap->cols[*s].g; +- *ctx->pptr++ = +- ctx->cmap->cols[*s].b; ++ const TGAColor *color = colormap_get_color (ctx->cmap, *s); ++ *ctx->pptr++ = color->r; ++ *ctx->pptr++ = color->g; ++ *ctx->pptr++ = color->b; + if (ctx->pbuf->n_channels == 4) +- *ctx->pptr++ = ctx->cmap->cols[*s].a; ++ *ctx->pptr++ = color->a; + s++, n++; + ctx->pbuf_bytes_done += ctx->pbuf->n_channels; + if (ctx->pbuf_bytes_done == ctx->pbuf_bytes) { +@@ -674,46 +718,44 @@ + + static gboolean try_colormap(TGAContext *ctx, GError **err) + { +- static guchar *p; +- static guint n; ++ TGAColor color; ++ guchar *p; ++ guint i, n_colors; + + g_return_val_if_fail(ctx != NULL, FALSE); + +- ctx->cmap = g_try_malloc(sizeof(TGAColormap)); ++ n_colors = LE16(ctx->hdr->cmap_n_colors); ++ ctx->cmap = colormap_new (n_colors); + if (!ctx->cmap) { + g_set_error_literal(err, GDK_PIXBUF_ERROR, GDK_PIXBUF_ERROR_INSUFFICIENT_MEMORY, +- _("Cannot allocate colormap structure")); +- return FALSE; +- } +- ctx->cmap->size = LE16(ctx->hdr->cmap_n_colors); +- ctx->cmap->cols = g_try_malloc(sizeof(TGAColor) * ctx->cmap->size); +- if (!ctx->cmap->cols) { +- g_set_error_literal(err, GDK_PIXBUF_ERROR, GDK_PIXBUF_ERROR_INSUFFICIENT_MEMORY, +- _("Cannot allocate colormap entries")); ++ _("Cannot allocate colormap")); + return FALSE; + } + + p = ctx->in->data; +- for (n = 0; n < ctx->cmap->size; n++) { ++ color.a = 255; ++ ++ for (i = 0; i < n_colors; i++) { + if ((ctx->hdr->cmap_bpp == 15) || (ctx->hdr->cmap_bpp == 16)) { + guint16 col = p[0] + (p[1] << 8); +- ctx->cmap->cols[n].b = (col >> 7) & 0xf8; +- ctx->cmap->cols[n].g = (col >> 2) & 0xf8; +- ctx->cmap->cols[n].r = col << 3; ++ color.b = (col >> 7) & 0xf8; ++ color.g = (col >> 2) & 0xf8; ++ color.r = col << 3; + p += 2; + } + else if ((ctx->hdr->cmap_bpp == 24) || (ctx->hdr->cmap_bpp == 32)) { +- ctx->cmap->cols[n].b = *p++; +- ctx->cmap->cols[n].g = *p++; +- ctx->cmap->cols[n].r = *p++; ++ color.b = *p++; ++ color.g = *p++; ++ color.r = *p++; + if (ctx->hdr->cmap_bpp == 32) +- ctx->cmap->cols[n].a = *p++; ++ color.a = *p++; + } else { + g_set_error_literal(err, GDK_PIXBUF_ERROR, + GDK_PIXBUF_ERROR_CORRUPT_IMAGE, + _("Unexpected bitdepth for colormap entries")); + return FALSE; + } ++ colormap_set_color (ctx->cmap, i, &color); + } + ctx->in = io_buffer_free_segment(ctx->in, ctx->cmap_size, err); + if (!ctx->in) +@@ -944,10 +986,8 @@ + ctx->udata); + } + g_free (ctx->hdr); +- if (ctx->cmap) { +- g_free (ctx->cmap->cols); +- g_free (ctx->cmap); +- } ++ if (ctx->cmap) ++ colormap_free (ctx->cmap); + if (ctx->pbuf) + g_object_unref (ctx->pbuf); + if (ctx->in && ctx->in->size) only in patch2: unchanged: --- gtk+2.0-2.20.1.orig/debian/patches/CVE-2015-7673/0003-io-tga-Colormaps-are-always-present-so-always-parse-.patch +++ gtk+2.0-2.20.1/debian/patches/CVE-2015-7673/0003-io-tga-Colormaps-are-always-present-so-always-parse-.patch @@ -0,0 +1,48 @@ +From 6ddca835100107e6b5841ce9d56074f6d98c387e Mon Sep 17 00:00:00 2001 +From: Benjamin Otte <o...@redhat.com> +Date: Sun, 20 Sep 2015 00:29:59 +0200 +Subject: [PATCH] io-tga: Colormaps are always present, so always parse them. + +We might end up with a colormap with 0 entries, but whatever, it's a +colormap. +--- + gdk-pixbuf/io-tga.c | 14 +++----------- + 1 file changed, 3 insertions(+), 11 deletions(-) + +--- a/gdk-pixbuf/io-tga.c ++++ b/gdk-pixbuf/io-tga.c +@@ -319,9 +319,8 @@ + || (ctx->hdr->type == TGA_TYPE_RLE_TRUECOLOR) + || (ctx->hdr->type == TGA_TYPE_RLE_GRAYSCALE)); + +- if (ctx->hdr->has_cmap) +- ctx->cmap_size = ((ctx->hdr->cmap_bpp + 7) >> 3) * +- LE16(ctx->hdr->cmap_n_colors); ++ ctx->cmap_size = ((ctx->hdr->cmap_bpp + 7) >> 3) * ++ LE16(ctx->hdr->cmap_n_colors); + + alpha = ((ctx->hdr->bpp == 16) || + (ctx->hdr->bpp == 32) || +@@ -680,13 +679,6 @@ + + g_return_val_if_fail(ctx != NULL, FALSE); + +- if (ctx->cmap_size == 0) { +- g_set_error_literal(err, GDK_PIXBUF_ERROR, +- GDK_PIXBUF_ERROR_CORRUPT_IMAGE, +- _("Image is corrupted or truncated")); +- return FALSE; +- } +- + ctx->cmap = g_try_malloc(sizeof(TGAColormap)); + if (!ctx->cmap) { + g_set_error_literal(err, GDK_PIXBUF_ERROR, GDK_PIXBUF_ERROR_INSUFFICIENT_MEMORY, +@@ -831,7 +823,7 @@ + return TRUE; + } + } +- if (ctx->hdr->has_cmap && !ctx->cmap) { ++ if (!ctx->cmap) { + if (ctx->in->size >= ctx->cmap_size) { + if (!try_colormap(ctx, err)) + return FALSE; only in patch2: unchanged: --- gtk+2.0-2.20.1.orig/debian/patches/CVE-2015-7674/0001-pixops-Don-t-overflow-variables-when-shifting-them.patch +++ gtk+2.0-2.20.1/debian/patches/CVE-2015-7674/0001-pixops-Don-t-overflow-variables-when-shifting-them.patch @@ -0,0 +1,30 @@ +From e9a5704edaa9aee9498f1fbf6e1b70fcce2e55aa Mon Sep 17 00:00:00 2001 +From: Benjamin Otte <o...@redhat.com> +Date: Tue, 22 Sep 2015 22:44:51 +0200 +Subject: [PATCH] pixops: Don't overflow variables when shifting them + +If we shift by 16 bits we need to be sure those 16 bits actually exist. +They do now. +--- + gdk-pixbuf/pixops/pixops.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +--- a/gdk-pixbuf/pixops/pixops.c ++++ b/gdk-pixbuf/pixops/pixops.c +@@ -266,11 +266,11 @@ + double scale_x, + double scale_y) + { +- int i; +- int x; +- int x_step = (1 << SCALE_SHIFT) / scale_x; +- int y_step = (1 << SCALE_SHIFT) / scale_y; +- int xmax, xstart, xstop, x_pos, y_pos; ++ gint64 i; ++ gint64 x; ++ gint64 x_step = (1 << SCALE_SHIFT) / scale_x; ++ gint64 y_step = (1 << SCALE_SHIFT) / scale_y; ++ gint64 xmax, xstart, xstop, x_pos, y_pos; + const guchar *p; + + #define INNER_LOOP(SRC_CHANNELS,DEST_CHANNELS,ASSIGN_PIXEL) \
signature.asc
Description: Digital signature