Readd old mono for iFolder System
Package-Manager: portage-2.2.0_alpha166 RepoMan-Options: --force
This commit is contained in:
164
dev-dotnet/libgdiplus/files/libgdiplus-2.10.1-libpng15.patch
Normal file
164
dev-dotnet/libgdiplus/files/libgdiplus-2.10.1-libpng15.patch
Normal file
@@ -0,0 +1,164 @@
|
||||
$NetBSD: patch-aa,v 1.8 2011/01/21 10:21:51 wiz Exp $
|
||||
|
||||
Fix build with png-1.5.
|
||||
|
||||
--- src/pngcodec.c.orig 2010-11-03 16:52:54.000000000 +0000
|
||||
+++ src/pngcodec.c
|
||||
@@ -116,10 +116,15 @@ gdip_load_png_properties (png_structp pn
|
||||
bitmap_data->dpi_horz = png_get_x_pixels_per_inch(png_ptr, info_ptr);
|
||||
bitmap_data->dpi_vert = png_get_y_pixels_per_inch(png_ptr, info_ptr);
|
||||
#elif defined(PNG_pHYs_SUPPORTED)
|
||||
- if ((info_ptr->valid & PNG_INFO_pHYs) && (info_ptr->phys_unit_type == PNG_RESOLUTION_METER)) {
|
||||
- bitmap_data->image_flags |= ImageFlagsHasRealDPI;
|
||||
- bitmap_data->dpi_horz = info_ptr->x_pixels_per_unit * 0.0254;
|
||||
- bitmap_data->dpi_vert = info_ptr->y_pixels_per_unit * 0.0254;
|
||||
+ if (png_get_valid (png_ptr, info_ptr, PNG_INFO_pHYs)) {
|
||||
+ png_uint_32 res_x, res_y;
|
||||
+ int unit_type;
|
||||
+ png_get_pHYs (png_ptr, info_ptr, &res_x, &res_y, &unit_type);
|
||||
+ if (unit_type == PNG_RESOLUTION_METER) {
|
||||
+ bitmap_data->image_flags |= ImageFlagsHasRealDPI;
|
||||
+ bitmap_data->dpi_horz = res_x * 0.0254;
|
||||
+ bitmap_data->dpi_vert = res_y * 0.0254;
|
||||
+ }
|
||||
}
|
||||
#endif
|
||||
/* default to screen resolution (if nothing was provided or available) */
|
||||
@@ -130,7 +135,7 @@ gdip_load_png_properties (png_structp pn
|
||||
#if defined(PNG_iCCP_SUPPORTED)
|
||||
{
|
||||
png_charp name;
|
||||
- png_charp profile;
|
||||
+ png_bytep profile;
|
||||
png_uint_32 proflen;
|
||||
int compression_type;
|
||||
|
||||
@@ -292,6 +297,11 @@ gdip_load_png_image_from_file_or_stream
|
||||
ImageFlags colourspace_flag;
|
||||
int i;
|
||||
int j;
|
||||
+ png_colorp png_palette;
|
||||
+ int png_num_palette;
|
||||
+ png_bytep trans_alpha;
|
||||
+ int num_trans;
|
||||
+ png_color_16p trans_color;
|
||||
|
||||
width = png_get_image_width (png_ptr, info_ptr);
|
||||
height = png_get_image_height (png_ptr, info_ptr);
|
||||
@@ -309,6 +319,8 @@ gdip_load_png_image_from_file_or_stream
|
||||
}
|
||||
|
||||
/* Copy palette. */
|
||||
+ png_get_PLTE (png_ptr, info_ptr, &png_palette, &png_num_palette);
|
||||
+
|
||||
num_colours = 1 << bit_depth;
|
||||
|
||||
if (png_get_color_type (png_ptr, info_ptr) == PNG_COLOR_TYPE_GRAY) {
|
||||
@@ -321,8 +333,8 @@ gdip_load_png_image_from_file_or_stream
|
||||
colourspace_flag = ImageFlagsColorSpaceRGB;
|
||||
|
||||
palette_entries = num_colours;
|
||||
- if (palette_entries > info_ptr->num_palette) {
|
||||
- palette_entries = info_ptr->num_palette;
|
||||
+ if (palette_entries > png_num_palette) {
|
||||
+ palette_entries = png_num_palette;
|
||||
}
|
||||
|
||||
palette = GdipAlloc (sizeof(ColorPalette) + (num_colours - 1) * sizeof(ARGB));
|
||||
@@ -331,29 +343,30 @@ gdip_load_png_image_from_file_or_stream
|
||||
|
||||
for (i=0; i < palette_entries; i++) {
|
||||
set_pixel_bgra (&palette->Entries[i], 0,
|
||||
- info_ptr->palette[i].blue,
|
||||
- info_ptr->palette[i].green,
|
||||
- info_ptr->palette[i].red,
|
||||
+ png_palette[i].blue,
|
||||
+ png_palette[i].green,
|
||||
+ png_palette[i].red,
|
||||
0xFF); /* alpha */
|
||||
}
|
||||
}
|
||||
|
||||
+ png_get_tRNS (png_ptr, info_ptr, &trans_alpha, &num_trans, &trans_color);
|
||||
/* Make sure transparency is respected. */
|
||||
- if (info_ptr->num_trans > 0) {
|
||||
+ if (num_trans > 0) {
|
||||
palette->Flags |= PaletteFlagsHasAlpha;
|
||||
colourspace_flag |= ImageFlagsHasAlpha;
|
||||
|
||||
- if (info_ptr->num_trans > info_ptr->num_palette) {
|
||||
- info_ptr->num_trans = info_ptr->num_palette;
|
||||
+ if (num_trans > png_num_palette) {
|
||||
+ num_trans = png_num_palette;
|
||||
}
|
||||
|
||||
- for (i=0; i < info_ptr->num_trans; i++) {
|
||||
+ for (i=0; i < num_trans; i++) {
|
||||
set_pixel_bgra(&palette->Entries[i], 0,
|
||||
- info_ptr->palette[i].blue,
|
||||
- info_ptr->palette[i].green,
|
||||
- info_ptr->palette[i].red,
|
||||
+ png_palette[i].blue,
|
||||
+ png_palette[i].green,
|
||||
+ png_palette[i].red,
|
||||
#if PNG_LIBPNG_VER > 10399
|
||||
- info_ptr->trans_alpha [i]); /* alpha */
|
||||
+ trans_alpha [i]); /* alpha */
|
||||
#else
|
||||
info_ptr->trans[i]); /* alpha */
|
||||
#endif
|
||||
@@ -398,6 +411,8 @@ gdip_load_png_image_from_file_or_stream
|
||||
BYTE bit_depth;
|
||||
int stride;
|
||||
int interlace;
|
||||
+ png_colorp png_palette;
|
||||
+ int png_num_palette;
|
||||
png_bytep *row_pointers;
|
||||
BYTE *rawptr;
|
||||
int i, j;
|
||||
@@ -490,32 +505,33 @@ gdip_load_png_image_from_file_or_stream
|
||||
png_byte palette = 0;
|
||||
png_byte pix = *rowp++;
|
||||
|
||||
+ png_get_PLTE (png_ptr, info_ptr, &png_palette, &png_num_palette);
|
||||
palette = (pix >> 6) & 0x03;
|
||||
set_pixel_bgra (rawptr, 0,
|
||||
- info_ptr->palette[palette].blue,
|
||||
- info_ptr->palette[palette].green,
|
||||
- info_ptr->palette[palette].red,
|
||||
+ png_palette[palette].blue,
|
||||
+ png_palette[palette].green,
|
||||
+ png_palette[palette].red,
|
||||
0xFF); /* alpha */
|
||||
|
||||
palette = (pix >> 4) & 0x03;
|
||||
set_pixel_bgra (rawptr, 4,
|
||||
- info_ptr->palette[palette].blue,
|
||||
- info_ptr->palette[palette].green,
|
||||
- info_ptr->palette[palette].red,
|
||||
+ png_palette[palette].blue,
|
||||
+ png_palette[palette].green,
|
||||
+ png_palette[palette].red,
|
||||
0xFF); /* alpha */
|
||||
|
||||
palette = (pix >> 2) & 0x03;
|
||||
set_pixel_bgra (rawptr, 8,
|
||||
- info_ptr->palette[palette].blue,
|
||||
- info_ptr->palette[palette].green,
|
||||
- info_ptr->palette[palette].red,
|
||||
+ png_palette[palette].blue,
|
||||
+ png_palette[palette].green,
|
||||
+ png_palette[palette].red,
|
||||
0xFF); /* alpha */
|
||||
|
||||
palette = pix & 0x03;
|
||||
set_pixel_bgra (rawptr, 12,
|
||||
- info_ptr->palette[palette].blue,
|
||||
- info_ptr->palette[palette].green,
|
||||
- info_ptr->palette[palette].red,
|
||||
+ png_palette[palette].blue,
|
||||
+ png_palette[palette].green,
|
||||
+ png_palette[palette].red,
|
||||
0xFF); /* alpha */
|
||||
rawptr += 16;
|
||||
}
|
||||
215
dev-dotnet/libgdiplus/files/libgdiplus-2.6.7-fix-overflows.patch
Normal file
215
dev-dotnet/libgdiplus/files/libgdiplus-2.6.7-fix-overflows.patch
Normal file
@@ -0,0 +1,215 @@
|
||||
From 6779fbf994d5270720ccb1687ba8b004e20a1821 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastien Pouliot <sebastien@ximian.com>
|
||||
Date: Mon, 16 Aug 2010 16:48:02 -0400
|
||||
Subject: [PATCH] Fix integer overflows when loading images, see bnc #630756
|
||||
|
||||
* src/bmpcodec.c:
|
||||
* src/jpgcodec.c:
|
||||
* src/tifcodec.c:
|
||||
Ensure no integer overflow can occur when computing the
|
||||
stride or the total pixel size (in bytes) used to load
|
||||
pictures in memory. Fix bug #630756
|
||||
---
|
||||
src/bmpcodec.c | 32 +++++++++++++++++++++++---------
|
||||
src/jpegcodec.c | 25 +++++++++++++++++++------
|
||||
src/tiffcodec.c | 23 ++++++++++++++++++-----
|
||||
3 files changed, 60 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/src/bmpcodec.c b/src/bmpcodec.c
|
||||
index 7f02561..5547262 100644
|
||||
--- a/src/bmpcodec.c
|
||||
+++ b/src/bmpcodec.c
|
||||
@@ -781,7 +781,6 @@ gdip_read_bmp_image (void *pointer, GpImage **image, ImageSource source)
|
||||
int colours;
|
||||
BOOL os2format = FALSE;
|
||||
BOOL upsidedown = TRUE;
|
||||
- int size;
|
||||
int size_read;
|
||||
BYTE *data_read = NULL;
|
||||
int line;
|
||||
@@ -793,6 +792,7 @@ gdip_read_bmp_image (void *pointer, GpImage **image, ImageSource source)
|
||||
ARGB green_mask = 0;
|
||||
ARGB blue_mask = 0;
|
||||
int red_shift = 0;
|
||||
+ unsigned long long int size;
|
||||
|
||||
status = gdip_read_BITMAPINFOHEADER (pointer, &bmi, source, &os2format, &upsidedown);
|
||||
if (status != Ok)
|
||||
@@ -860,23 +860,30 @@ gdip_read_bmp_image (void *pointer, GpImage **image, ImageSource source)
|
||||
result->active_bitmap->width = bmi.biWidth;
|
||||
result->active_bitmap->height = bmi.biHeight;
|
||||
|
||||
+ /* biWidth and biHeight are LONG (32 bits signed integer) */
|
||||
+ size = bmi.biWidth;
|
||||
+
|
||||
switch (result->active_bitmap->pixel_format) {
|
||||
case PixelFormat1bppIndexed:
|
||||
- result->active_bitmap->stride = (result->active_bitmap->width + 7) / 8;
|
||||
+ result->active_bitmap->stride = (size + 7) / 8;
|
||||
break;
|
||||
case PixelFormat4bppIndexed:
|
||||
- result->active_bitmap->stride = (result->active_bitmap->width + 1) / 2;
|
||||
+ result->active_bitmap->stride = (size + 1) / 2;
|
||||
break;
|
||||
case PixelFormat8bppIndexed:
|
||||
- result->active_bitmap->stride = result->active_bitmap->width;
|
||||
- break;
|
||||
- case PixelFormat24bppRGB:
|
||||
- result->active_bitmap->stride = result->active_bitmap->width * 4;
|
||||
+ result->active_bitmap->stride = size;
|
||||
break;
|
||||
default:
|
||||
/* For other types, we assume 32 bit and translate into 32 bit from source format */
|
||||
result->active_bitmap->pixel_format = PixelFormat32bppRGB;
|
||||
- result->active_bitmap->stride = result->active_bitmap->width * 4;
|
||||
+ /* fall-thru */
|
||||
+ case PixelFormat24bppRGB:
|
||||
+ /* stride is a (signed) _int_ and once multiplied by 4 it should hold a value that can be allocated by GdipAlloc
|
||||
+ * this effectively limits 'width' to 536870911 pixels */
|
||||
+ size *= 4;
|
||||
+ if (size > G_MAXINT32)
|
||||
+ goto error;
|
||||
+ result->active_bitmap->stride = size;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -922,7 +929,14 @@ gdip_read_bmp_image (void *pointer, GpImage **image, ImageSource source)
|
||||
data_read = NULL;
|
||||
}
|
||||
|
||||
- pixels = GdipAlloc (result->active_bitmap->stride * result->active_bitmap->height);
|
||||
+ size = result->active_bitmap->stride;
|
||||
+ /* ensure total 'size' does not overflow an integer and fits inside our 2GB limit */
|
||||
+ size *= result->active_bitmap->height;
|
||||
+ if (size > G_MAXINT32) {
|
||||
+ status = OutOfMemory;
|
||||
+ goto error;
|
||||
+ }
|
||||
+ pixels = GdipAlloc (size);
|
||||
if (pixels == NULL) {
|
||||
status = OutOfMemory;
|
||||
goto error;
|
||||
diff --git a/src/jpegcodec.c b/src/jpegcodec.c
|
||||
index 55df776..e330efb 100644
|
||||
--- a/src/jpegcodec.c
|
||||
+++ b/src/jpegcodec.c
|
||||
@@ -282,6 +282,7 @@ gdip_load_jpeg_image_internal (struct jpeg_source_mgr *src, GpImage **image)
|
||||
BYTE *lines[4] = {NULL, NULL, NULL, NULL};
|
||||
GpStatus status;
|
||||
int stride;
|
||||
+ unsigned long long int size;
|
||||
|
||||
destbuf = NULL;
|
||||
result = NULL;
|
||||
@@ -323,20 +324,21 @@ gdip_load_jpeg_image_internal (struct jpeg_source_mgr *src, GpImage **image)
|
||||
|
||||
if (cinfo.num_components == 1) {
|
||||
result->cairo_format = CAIRO_FORMAT_A8;
|
||||
- result->active_bitmap->stride = cinfo.image_width;
|
||||
result->active_bitmap->pixel_format = PixelFormat8bppIndexed;
|
||||
+ size = 1;
|
||||
} else if (cinfo.num_components == 3) {
|
||||
/* libjpeg gives us RGB for many formats and
|
||||
* we convert to RGB format when needed. JPEG
|
||||
* does not support alpha (transparency). */
|
||||
result->cairo_format = CAIRO_FORMAT_ARGB32;
|
||||
- result->active_bitmap->stride = 4 * cinfo.image_width;
|
||||
result->active_bitmap->pixel_format = PixelFormat24bppRGB;
|
||||
+ size = 4;
|
||||
} else if (cinfo.num_components == 4) {
|
||||
result->cairo_format = CAIRO_FORMAT_ARGB32;
|
||||
- result->active_bitmap->stride = 4 * cinfo.image_width;
|
||||
result->active_bitmap->pixel_format = PixelFormat32bppRGB;
|
||||
- }
|
||||
+ size = 4;
|
||||
+ } else
|
||||
+ goto error;
|
||||
|
||||
switch (cinfo.jpeg_color_space) {
|
||||
case JCS_GRAYSCALE:
|
||||
@@ -360,7 +362,12 @@ gdip_load_jpeg_image_internal (struct jpeg_source_mgr *src, GpImage **image)
|
||||
break;
|
||||
}
|
||||
|
||||
- stride = result->active_bitmap->stride;
|
||||
+ size *= cinfo.image_width;
|
||||
+ /* stride is a (signed) _int_ and once multiplied by 4 it should hold a value that can be allocated by GdipAlloc
|
||||
+ * this effectively limits 'width' to 536870911 pixels */
|
||||
+ if (size > G_MAXINT32)
|
||||
+ goto error;
|
||||
+ stride = result->active_bitmap->stride = size;
|
||||
|
||||
/* Request cairo-compat output */
|
||||
/* libjpeg can do only following conversions,
|
||||
@@ -397,7 +404,13 @@ gdip_load_jpeg_image_internal (struct jpeg_source_mgr *src, GpImage **image)
|
||||
|
||||
jpeg_start_decompress (&cinfo);
|
||||
|
||||
- destbuf = GdipAlloc (stride * cinfo.output_height);
|
||||
+ /* ensure total 'size' does not overflow an integer and fits inside our 2GB limit */
|
||||
+ size *= cinfo.output_height;
|
||||
+ if (size > G_MAXINT32) {
|
||||
+ status = OutOfMemory;
|
||||
+ goto error;
|
||||
+ }
|
||||
+ destbuf = GdipAlloc (size);
|
||||
if (destbuf == NULL) {
|
||||
status = OutOfMemory;
|
||||
goto error;
|
||||
diff --git a/src/tiffcodec.c b/src/tiffcodec.c
|
||||
index 9e9504f..cf4cf3b 100644
|
||||
--- a/src/tiffcodec.c
|
||||
+++ b/src/tiffcodec.c
|
||||
@@ -1104,6 +1104,8 @@ gdip_load_tiff_image (TIFF *tiff, GpImage **image)
|
||||
frame = gdip_frame_add(result, &gdip_image_frameDimension_page_guid);
|
||||
|
||||
for (page = 0; page < num_of_pages; page++) {
|
||||
+ unsigned long long int size;
|
||||
+
|
||||
bitmap_data = gdip_frame_add_bitmapdata(frame);
|
||||
if (bitmap_data == NULL) {
|
||||
goto error;
|
||||
@@ -1139,14 +1141,25 @@ gdip_load_tiff_image (TIFF *tiff, GpImage **image)
|
||||
bitmap_data->image_flags |= ImageFlagsHasRealDPI;
|
||||
}
|
||||
|
||||
- bitmap_data->stride = tiff_image.width * 4;
|
||||
+ /* width and height are uint32, but TIFF uses 32 bits offsets (so it's real size limit is 4GB),
|
||||
+ * however libtiff uses signed int (int32 not uint32) as offsets so we limit ourselves to 2GB */
|
||||
+ size = tiff_image.width;
|
||||
+ /* stride is a (signed) _int_ and once multiplied by 4 it should hold a value that can be allocated by GdipAlloc
|
||||
+ * this effectively limits 'width' to 536870911 pixels */
|
||||
+ size *= sizeof (guint32);
|
||||
+ if (size > G_MAXINT32)
|
||||
+ goto error;
|
||||
+ bitmap_data->stride = size;
|
||||
bitmap_data->width = tiff_image.width;
|
||||
bitmap_data->height = tiff_image.height;
|
||||
bitmap_data->reserved = GBD_OWN_SCAN0;
|
||||
bitmap_data->image_flags |= ImageFlagsColorSpaceRGB | ImageFlagsHasRealPixelSize | ImageFlagsReadOnly;
|
||||
|
||||
- num_of_pixels = tiff_image.width * tiff_image.height;
|
||||
- pixbuf = GdipAlloc(num_of_pixels * sizeof(guint32));
|
||||
+ /* ensure total 'size' does not overflow an integer and fits inside our 2GB limit */
|
||||
+ size *= tiff_image.height;
|
||||
+ if (size > G_MAXINT32)
|
||||
+ goto error;
|
||||
+ pixbuf = GdipAlloc (size);
|
||||
if (pixbuf == NULL) {
|
||||
goto error;
|
||||
}
|
||||
@@ -1168,9 +1181,9 @@ gdip_load_tiff_image (TIFF *tiff, GpImage **image)
|
||||
memcpy(pixbuf + (bitmap_data->stride * (tiff_image.height - i - 1)), pixbuf_row, bitmap_data->stride);
|
||||
}
|
||||
|
||||
- /* Now flip from ARGB to ABGR */
|
||||
+ /* Now flip from ARGB to ABGR processing one pixel (4 bytes) at the time */
|
||||
pixbuf_ptr = (guint32 *)pixbuf;
|
||||
- for (i = 0; i < num_of_pixels; i++) {
|
||||
+ for (i = 0; i < (size >> 2); i++) {
|
||||
*pixbuf_ptr = (*pixbuf_ptr & 0xff000000) |
|
||||
((*pixbuf_ptr & 0x00ff0000) >> 16) |
|
||||
(*pixbuf_ptr & 0x0000ff00) |
|
||||
--
|
||||
1.7.2.1
|
||||
|
||||
Reference in New Issue
Block a user