summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKim Woelders <kim@woelders.dk>2009-07-18 09:58:43 +0000
committerKim Woelders <kim@woelders.dk>2009-07-18 09:58:43 +0000
commitdedebfcc1a413f5cac0e850ba0d557e431996a63 (patch)
tree3dfd412577c4d1399cbacc510c6e74900fa80a29
parentebab7f27bba4eb286d4b93da46b9483c298420e1 (diff)
downloadimlib2-dedebfcc1a413f5cac0e850ba0d557e431996a63.tar.gz
Relax 8192 pixel dimension limit (ticket 361).
SVN revision: 41412
-rw-r--r--src/lib/Imlib2.h3
-rw-r--r--src/lib/rend.c7
-rw-r--r--src/modules/loaders/loader_argb.c2
-rw-r--r--src/modules/loaders/loader_bmp.c2
-rw-r--r--src/modules/loaders/loader_gif.c3
-rw-r--r--src/modules/loaders/loader_jpeg.c4
-rw-r--r--src/modules/loaders/loader_lbm.c3
-rw-r--r--src/modules/loaders/loader_png.c2
-rw-r--r--src/modules/loaders/loader_pnm.c2
-rw-r--r--src/modules/loaders/loader_tga.c3
-rw-r--r--src/modules/loaders/loader_tiff.c3
-rw-r--r--src/modules/loaders/loader_xpm.c10
12 files changed, 28 insertions, 16 deletions
diff --git a/src/lib/Imlib2.h b/src/lib/Imlib2.h
index e4008df..3e2c5f2 100644
--- a/src/lib/Imlib2.h
+++ b/src/lib/Imlib2.h
@@ -34,6 +34,9 @@
# define DATA8 unsigned char
# endif
+/* Maximum image dimension */
+#define IMLIB_MAX_DIM (2 << 20)
+
/* opaque data types */
typedef void *Imlib_Context;
typedef void *Imlib_Image;
diff --git a/src/lib/rend.c b/src/lib/rend.c
index b008f6d..bef019c 100644
--- a/src/lib/rend.c
+++ b/src/lib/rend.c
@@ -15,6 +15,9 @@
#include "rend.h"
#include "rotate.h"
+/* Maximum pixmap dimension (65535) */
+#define X_MAX_DIM ((2 << 16) - 1)
+
/* size of the lines per segment we scale / render at a time */
#define LINESIZE 16
@@ -279,7 +282,7 @@ __imlib_RenderImage(Display * d, ImlibImage * im,
if ((sw <= 0) || (sh <= 0))
return;
/* if the output is too big (8k arbitary limit here) dont bother */
- if ((abs(dw) > 8192) || (abs(dh) > 8192))
+ if ((abs(dw) > X_MAX_DIM) || (abs(dh) > X_MAX_DIM))
return;
/* clip the source rect to be within the actual image */
psx = sx;
@@ -304,7 +307,7 @@ __imlib_RenderImage(Display * d, ImlibImage * im,
if ((sw <= 0) || (sh <= 0))
return;
/* if the output is too big (8k arbitary limit here) dont bother */
- if ((abs(dw) > 8192) || (abs(dh) > 8192))
+ if ((abs(dw) > X_MAX_DIM) || (abs(dh) > X_MAX_DIM))
return;
/* if we are scaling the image at all make a scaling buffer */
if (!((sw == dw) && (sh == dh)))
diff --git a/src/modules/loaders/loader_argb.c b/src/modules/loaders/loader_argb.c
index 2300a32..709c60b 100644
--- a/src/modules/loaders/loader_argb.c
+++ b/src/modules/loaders/loader_argb.c
@@ -36,7 +36,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
fclose(f);
return 0;
}
- if ((w < 1) || (h < 1) || (w > 8192) || (h > 8192))
+ if ((w < 1) || (h < 1) || (w > IMLIB_MAX_DIM) || (h > IMLIB_MAX_DIM))
{
fclose(f);
return 0;
diff --git a/src/modules/loaders/loader_bmp.c b/src/modules/loaders/loader_bmp.c
index 41faeeb..98a3b5e 100644
--- a/src/modules/loaders/loader_bmp.c
+++ b/src/modules/loaders/loader_bmp.c
@@ -193,7 +193,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
return 0;
}
- if ((w < 1) || (h < 1) || (w > 8192) || (h > 8192))
+ if ((w < 1) || (h < 1) || (w > IMLIB_MAX_DIM) || (h > IMLIB_MAX_DIM))
{
fclose(f);
return 0;
diff --git a/src/modules/loaders/loader_gif.c b/src/modules/loaders/loader_gif.c
index b462aec..10245ce 100644
--- a/src/modules/loaders/loader_gif.c
+++ b/src/modules/loaders/loader_gif.c
@@ -58,7 +58,8 @@ load(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity,
}
w = gif->Image.Width;
h = gif->Image.Height;
- if ((w < 1) || (h < 1) || (w > 8192) || (h > 8192))
+ if ((w < 1) || (h < 1) ||
+ (w > IMLIB_MAX_DIM) || (h > IMLIB_MAX_DIM))
{
DGifCloseFile(gif);
return 0;
diff --git a/src/modules/loaders/loader_jpeg.c b/src/modules/loaders/loader_jpeg.c
index 152af04..c7cc0b8 100644
--- a/src/modules/loaders/loader_jpeg.c
+++ b/src/modules/loaders/loader_jpeg.c
@@ -76,7 +76,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
{
im->w = w = cinfo.output_width;
im->h = h = cinfo.output_height;
- if ((w < 1) || (h < 1) || (w > 8192) || (h > 8192))
+ if ((w < 1) || (h < 1) || (w > IMLIB_MAX_DIM) || (h > IMLIB_MAX_DIM))
{
im->w = im->h = 0;
jpeg_destroy_decompress(&cinfo);
@@ -96,7 +96,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
im->h = h = cinfo.output_height;
if ((cinfo.rec_outbuf_height > 16) || (cinfo.output_components <= 0) ||
- (w < 1) || (h < 1) || (w > 8192) || (h > 8192))
+ (w < 1) || (h < 1) || (w > IMLIB_MAX_DIM) || (h > IMLIB_MAX_DIM))
{
im->w = im->h = 0;
jpeg_destroy_decompress(&cinfo);
diff --git a/src/modules/loaders/loader_lbm.c b/src/modules/loaders/loader_lbm.c
index 170db89..878e4b1 100644
--- a/src/modules/loaders/loader_lbm.c
+++ b/src/modules/loaders/loader_lbm.c
@@ -402,7 +402,8 @@ ILBM ilbm;
im->w = L2RWORD(ilbm.bmhd.data);
im->h = L2RWORD(ilbm.bmhd.data + 2);
- if ((im->w < 1) || (im->h < 1) || (im->w > 8192) || (im->h > 8192))
+ if ((im->w < 1) || (im->h < 1) ||
+ (im->w > IMLIB_MAX_DIM) || (im->h > IMLIB_MAX_DIM))
{
ok = 0;
}
diff --git a/src/modules/loaders/loader_png.c b/src/modules/loaders/loader_png.c
index 3928f95..60d32dd 100644
--- a/src/modules/loaders/loader_png.c
+++ b/src/modules/loaders/loader_png.c
@@ -71,7 +71,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
&interlace_type, NULL, NULL);
im->w = (int)w32;
im->h = (int)h32;
- if ((w32 < 1) || (h32 < 1) || (w32 > 8192) || (h32 > 8192))
+ if ((w32 < 1) || (h32 < 1) || (w32 > IMLIB_MAX_DIM) || (h32 > IMLIB_MAX_DIM))
{
png_read_end(png_ptr, info_ptr);
png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp) NULL);
diff --git a/src/modules/loaders/loader_pnm.c b/src/modules/loaders/loader_pnm.c
index da4cd03..b29b2f7 100644
--- a/src/modules/loaders/loader_pnm.c
+++ b/src/modules/loaders/loader_pnm.c
@@ -103,7 +103,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
im->w = w;
im->h = h;
- if ((w < 1) || (h < 1) || (w > 8192) || (h > 8192))
+ if ((w < 1) || (h < 1) || (w > IMLIB_MAX_DIM) || (h > IMLIB_MAX_DIM))
{
fclose(f);
return 0;
diff --git a/src/modules/loaders/loader_tga.c b/src/modules/loaders/loader_tga.c
index 8230d53..6228d01 100644
--- a/src/modules/loaders/loader_tga.c
+++ b/src/modules/loaders/loader_tga.c
@@ -283,7 +283,8 @@ load(ImlibImage * im, ImlibProgressFunction progress,
im->w = (header->widthHi << 8) | header->widthLo;
im->h = (header->heightHi << 8) | header->heightLo;
- if ((im->w < 1) || (im->h < 1) || (im->w > 8192) || (im->h > 8192))
+ if ((im->w < 1) || (im->h < 1) ||
+ (im->w > IMLIB_MAX_DIM) || (im->h > IMLIB_MAX_DIM))
{
munmap(seg, ss.st_size);
close(fd);
diff --git a/src/modules/loaders/loader_tiff.c b/src/modules/loaders/loader_tiff.c
index 8aa3d15..799c360 100644
--- a/src/modules/loaders/loader_tiff.c
+++ b/src/modules/loaders/loader_tiff.c
@@ -184,7 +184,8 @@ load(ImlibImage * im, ImlibProgressFunction progress,
rgba_image.image = im;
im->w = width = rgba_image.rgba.width;
im->h = height = rgba_image.rgba.height;
- if ((width < 1) || (height < 1) || (width > 8192) || (height > 8192))
+ if ((width < 1) || (height < 1) ||
+ (width > IMLIB_MAX_DIM) || (height > IMLIB_MAX_DIM))
{
TIFFRGBAImageEnd((TIFFRGBAImage *) & rgba_image);
TIFFClose(tif);
diff --git a/src/modules/loaders/loader_xpm.c b/src/modules/loaders/loader_xpm.c
index a3e5eb2..73ddbcc 100644
--- a/src/modules/loaders/loader_xpm.c
+++ b/src/modules/loaders/loader_xpm.c
@@ -204,19 +204,21 @@ load(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity,
xpm_parse_done();
return 0;
}
- if ((w > 8192) || (w < 1))
+ if ((w > IMLIB_MAX_DIM) || (w < 1))
{
fprintf(stderr,
- "IMLIB ERROR: Image width > 8192 or < 1 pixels for file\n");
+ "IMLIB ERROR: Image width > %d or < 1 pixels for file\n",
+ IMLIB_MAX_DIM);
free(line);
fclose(f);
xpm_parse_done();
return 0;
}
- if ((h > 8192) || (h < 1))
+ if ((h > IMLIB_MAX_DIM) || (h < 1))
{
fprintf(stderr,
- "IMLIB ERROR: Image height > 8192 or < 1 pixels for file\n");
+ "IMLIB ERROR: Image height > %d or < 1 pixels for file\n",
+ IMLIB_MAX_DIM);
free(line);
fclose(f);
xpm_parse_done();