From 26cec44310c470defd8abee55e550baeb916e76d Mon Sep 17 00:00:00 2001 From: Danny Rawlins Date: Tue, 8 May 2007 10:51:20 +1000 Subject: [PATCH] imlib: added from romsters repo --- imlib/.footprint | 61 +++++ imlib/.md5sum | 2 + imlib/Pkgfile | 25 ++ imlib/imlib-1.9.15.patch | 510 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 598 insertions(+) create mode 100644 imlib/.footprint create mode 100644 imlib/.md5sum create mode 100644 imlib/Pkgfile create mode 100644 imlib/imlib-1.9.15.patch diff --git a/imlib/.footprint b/imlib/.footprint new file mode 100644 index 000000000..624b09ba8 --- /dev/null +++ b/imlib/.footprint @@ -0,0 +1,61 @@ +drwxr-xr-x root/root usr/ +drwxr-xr-x root/root usr/bin/ +-rwxr-xr-x root/root usr/bin/imlib-config +-rwxr-xr-x root/root usr/bin/imlib_config +drwxr-xr-x root/root usr/etc/ +-rw-r--r-- root/root usr/etc/im_palette-small.pal +-rw-r--r-- root/root usr/etc/im_palette-tiny.pal +-rw-r--r-- root/root usr/etc/im_palette.pal +-rw-r--r-- root/root usr/etc/imrc +drwxr-xr-x root/root usr/include/ +-rw-r--r-- root/root usr/include/Imlib.h +-rw-r--r-- root/root usr/include/Imlib_private.h +-rw-r--r-- root/root usr/include/Imlib_types.h +-rw-r--r-- root/root usr/include/gdk_imlib.h +-rw-r--r-- root/root usr/include/gdk_imlib_private.h +-rw-r--r-- root/root usr/include/gdk_imlib_types.h +drwxr-xr-x root/root usr/lib/ +-rw-r--r-- root/root usr/lib/libImlib.a +-rwxr-xr-x root/root usr/lib/libImlib.la +lrwxrwxrwx root/root usr/lib/libImlib.so -> libImlib.so.1.9.15 +lrwxrwxrwx root/root usr/lib/libImlib.so.1 -> libImlib.so.1.9.15 +-rwxr-xr-x root/root usr/lib/libImlib.so.1.9.15 +-rw-r--r-- root/root usr/lib/libgdk_imlib.a +-rwxr-xr-x root/root usr/lib/libgdk_imlib.la +lrwxrwxrwx root/root usr/lib/libgdk_imlib.so -> libgdk_imlib.so.1.9.15 +lrwxrwxrwx root/root usr/lib/libgdk_imlib.so.1 -> libgdk_imlib.so.1.9.15 +-rwxr-xr-x root/root usr/lib/libgdk_imlib.so.1.9.15 +-rw-r--r-- root/root usr/lib/libimlib-bmp.a +-rwxr-xr-x root/root usr/lib/libimlib-bmp.la +-rwxr-xr-x root/root usr/lib/libimlib-bmp.so +-rw-r--r-- root/root usr/lib/libimlib-gif.a +-rwxr-xr-x root/root usr/lib/libimlib-gif.la +-rwxr-xr-x root/root usr/lib/libimlib-gif.so +-rw-r--r-- root/root usr/lib/libimlib-jpeg.a +-rwxr-xr-x root/root usr/lib/libimlib-jpeg.la +-rwxr-xr-x root/root usr/lib/libimlib-jpeg.so +-rw-r--r-- root/root usr/lib/libimlib-png.a +-rwxr-xr-x root/root usr/lib/libimlib-png.la +-rwxr-xr-x root/root usr/lib/libimlib-png.so +-rw-r--r-- root/root usr/lib/libimlib-ppm.a +-rwxr-xr-x root/root usr/lib/libimlib-ppm.la +-rwxr-xr-x root/root usr/lib/libimlib-ppm.so +-rw-r--r-- root/root usr/lib/libimlib-ps.a +-rwxr-xr-x root/root usr/lib/libimlib-ps.la +-rwxr-xr-x root/root usr/lib/libimlib-ps.so +-rw-r--r-- root/root usr/lib/libimlib-tiff.a +-rwxr-xr-x root/root usr/lib/libimlib-tiff.la +-rwxr-xr-x root/root usr/lib/libimlib-tiff.so +-rw-r--r-- root/root usr/lib/libimlib-xpm.a +-rwxr-xr-x root/root usr/lib/libimlib-xpm.la +-rwxr-xr-x root/root usr/lib/libimlib-xpm.so +drwxr-xr-x root/root usr/lib/pkgconfig/ +-rw-r--r-- root/root usr/lib/pkgconfig/imlib.pc +-rw-r--r-- root/root usr/lib/pkgconfig/imlibgdk.pc +drwxr-xr-x root/root usr/man/ +drwxr-xr-x root/root usr/man/man1/ +-rw-r--r-- root/root usr/man/man1/imlib-config.1.gz +-rw-r--r-- root/root usr/man/man1/imlib_config.1.gz +drwxr-xr-x root/root usr/share/ +drwxr-xr-x root/root usr/share/aclocal/ +-rw-r--r-- root/root usr/share/aclocal/imlib.m4 diff --git a/imlib/.md5sum b/imlib/.md5sum new file mode 100644 index 000000000..a089932b2 --- /dev/null +++ b/imlib/.md5sum @@ -0,0 +1,2 @@ +53b35c928f5d0d1f002595735c6b9b14 imlib-1.9.15.patch +7db987e6c52e4daf70d7d0f471238eae imlib-1.9.15.tar.bz2 diff --git a/imlib/Pkgfile b/imlib/Pkgfile new file mode 100644 index 000000000..3723dc455 --- /dev/null +++ b/imlib/Pkgfile @@ -0,0 +1,25 @@ +# Description: An image loading and rendering library for X11R6. +# URL: http://ftp.acc.umu.se/pub/GNOME/sources/imlib/1.9/ +# Maintainer: Danny Rawlins, romster at shortcircuit dot net dot au +# Packager: Daniel Mueller, daniel at danm dot de +# Depends on: gtk1 libungif libjpeg libtiff + +name=imlib +version=1.9.15 +release=1 +source=(http://ftp.gnome.org/pub/GNOME/sources/imlib/${version%.*}/imlib-$version.tar.bz2 + imlib-$version.patch) + +build() { + cd imlib-$version + # Security patch + patch -p1 -i $SRC/imlib-$version.patch + + ./configure \ + --prefix=/usr \ + --disable-modules + + make + make DESTDIR=$PKG install +} + diff --git a/imlib/imlib-1.9.15.patch b/imlib/imlib-1.9.15.patch new file mode 100644 index 000000000..d11036848 --- /dev/null +++ b/imlib/imlib-1.9.15.patch @@ -0,0 +1,510 @@ +diff -Nru imlib-1.9.15.orig/Imlib/load.c imlib-1.9.15/Imlib/load.c +--- imlib-1.9.15.orig/Imlib/load.c 2004-12-23 23:50:22.820521823 +0100 ++++ imlib-1.9.15/Imlib/load.c 2004-12-23 23:50:36.549790030 +0100 +@@ -4,6 +4,8 @@ + #include "Imlib_private.h" + #include + ++#define G_MAXINT ((int) 0x7fffffff) ++ + /* Split the ID - damages input */ + + static char * +@@ -41,13 +43,17 @@ + + /* + * Make sure we don't wrap on our memory allocations ++ * we check G_MAXINT/4 because rend.c malloc's w * h * bpp ++ * + 3 is safety margin + */ + + void * _imlib_malloc_image(unsigned int w, unsigned int h) + { +- if( w > 32767 || h > 32767) +- return NULL; +- return malloc(w * h * 3); ++ if (w <= 0 || w > 32767 || ++ h <= 0 || h > 32767 || ++ h >= (G_MAXINT/4 - 1) / w) ++ return NULL; ++ return malloc(w * h * 3 + 3); + } + + #ifdef HAVE_LIBJPEG +@@ -360,7 +366,9 @@ + npix = ww * hh; + *w = (int)ww; + *h = (int)hh; +- if(ww > 32767 || hh > 32767) ++ if (ww <= 0 || ww > 32767 || ++ hh <= 0 || hh > 32767 || ++ hh >= (G_MAXINT/sizeof(uint32)) / ww) + { + TIFFClose(tif); + return NULL; +@@ -463,7 +471,7 @@ + } + *w = gif->Image.Width; + *h = gif->Image.Height; +- if (*h > 32767 || *w > 32767) ++ if (*h <= 0 || *h > 32767 || *w <= 0 || *w > 32767) + { + return NULL; + } +@@ -1000,7 +1008,12 @@ + comment = 0; + quote = 0; + context = 0; ++ memset(lookup, 0, sizeof(lookup)); ++ + line = malloc(lsz); ++ if (!line) ++ return NULL; ++ + while (!done) + { + pc = c; +@@ -1029,25 +1042,25 @@ + { + /* Header */ + sscanf(line, "%i %i %i %i", w, h, &ncolors, &cpp); +- if (ncolors > 32766) ++ if (ncolors <= 0 || ncolors > 32766) + { + fprintf(stderr, "IMLIB ERROR: XPM files wth colors > 32766 not supported\n"); + free(line); + return NULL; + } +- if (cpp > 5) ++ if (cpp <= 0 || cpp > 5) + { + fprintf(stderr, "IMLIB ERROR: XPM files with characters per pixel > 5 not supported\n"); + free(line); + return NULL; + } +- if (*w > 32767) ++ if (*w <= 0 || *w > 32767) + { + fprintf(stderr, "IMLIB ERROR: Image width > 32767 pixels for file\n"); + free(line); + return NULL; + } +- if (*h > 32767) ++ if (*h <= 0 || *h > 32767) + { + fprintf(stderr, "IMLIB ERROR: Image height > 32767 pixels for file\n"); + free(line); +@@ -1080,11 +1093,13 @@ + { + int slen; + int hascolor, iscolor; ++ int space; + + iscolor = 0; + hascolor = 0; + tok[0] = 0; + col[0] = 0; ++ space = sizeof(col) - 1; + s[0] = 0; + len = strlen(line); + strncpy(cmap[j].str, line, cpp); +@@ -1107,10 +1122,10 @@ + { + if (k >= len) + { +- if (col[0]) +- strcat(col, " "); +- if (strlen(col) + strlen(s) < sizeof(col)) +- strcat(col, s); ++ if (col[0] && space > 0) ++ strcat(col, " "), space -= 1; ++ if (slen <= space) ++ strcat(col, s), space -= slen; + } + if (col[0]) + { +@@ -1140,14 +1155,17 @@ + } + } + } +- strcpy(tok, s); ++ if (slen < sizeof(tok)); ++ strcpy(tok, s); + col[0] = 0; ++ space = sizeof(col) - 1; + } + else + { +- if (col[0]) +- strcat(col, " "); +- strcat(col, s); ++ if (col[0] && space > 0) ++ strcat(col, " "), space -=1; ++ if (slen <= space) ++ strcat(col, s), space -= slen; + } + } + } +@@ -1376,12 +1394,12 @@ + sscanf(s, "%i %i", w, h); + a = *w; + b = *h; +- if (a > 32767) ++ if (a <= 0 || a > 32767) + { + fprintf(stderr, "IMLIB ERROR: Image width > 32767 pixels for file\n"); + return NULL; + } +- if (b > 32767) ++ if (b <= 0 || b > 32767) + { + fprintf(stderr, "IMLIB ERROR: Image height > 32767 pixels for file\n"); + return NULL; +diff -Nru imlib-1.9.15.orig/Imlib/utils.c imlib-1.9.15/Imlib/utils.c +--- imlib-1.9.15.orig/Imlib/utils.c 2004-12-23 23:50:22.824519281 +0100 ++++ imlib-1.9.15/Imlib/utils.c 2004-12-23 23:50:36.553787487 +0100 +@@ -1496,36 +1496,56 @@ + context = 0; + ptr = NULL; + end = NULL; ++ memset(lookup, 0, sizeof(lookup)); + + while (!done) + { + line = data[count++]; ++ if (!line) ++ break; ++ line = strdup(line); ++ if (!line) ++ break; ++ len = strlen(line); ++ for (i = 0; i < len; ++i) ++ { ++ c = line[i]; ++ if (c < 32) ++ line[i] = 32; ++ else if (c > 127) ++ line[i] = 127; ++ } ++ + if (context == 0) + { + /* Header */ + sscanf(line, "%i %i %i %i", &w, &h, &ncolors, &cpp); +- if (ncolors > 32766) ++ if (ncolors <= 0 || ncolors > 32766) + { + fprintf(stderr, "IMLIB ERROR: XPM data wth colors > 32766 not supported\n"); + free(im); ++ free(line); + return NULL; + } +- if (cpp > 5) ++ if (cpp <= 0 || cpp > 5) + { + fprintf(stderr, "IMLIB ERROR: XPM data with characters per pixel > 5 not supported\n"); + free(im); ++ free(line); + return NULL; + } +- if (w > 32767) ++ if (w <= 0 || w > 32767) + { + fprintf(stderr, "IMLIB ERROR: Image width > 32767 pixels for data\n"); + free(im); ++ free(line); + return NULL; + } +- if (h > 32767) ++ if (h <= 0 || h > 32767) + { + fprintf(stderr, "IMLIB ERROR: Image height > 32767 pixels for data\n"); + free(im); ++ free(line); + return NULL; + } + cmap = malloc(sizeof(struct _cmap) * ncolors); +@@ -1533,6 +1553,7 @@ + if (!cmap) + { + free(im); ++ free(line); + return NULL; + } + im->rgb_width = w; +@@ -1542,6 +1563,7 @@ + { + free(cmap); + free(im); ++ free(line); + return NULL; + } + im->alpha_data = NULL; +@@ -1817,6 +1839,7 @@ + } + if ((ptr) && ((ptr - im->rgb_data) >= w * h * 3)) + done = 1; ++ free(line); + } + if (!transp) + { +diff -Nru imlib-1.9.15.orig/gdk_imlib/io-gif.c imlib-1.9.15/gdk_imlib/io-gif.c +--- imlib-1.9.15.orig/gdk_imlib/io-gif.c 2004-12-23 23:50:22.863494493 +0100 ++++ imlib-1.9.15/gdk_imlib/io-gif.c 2004-12-23 23:50:36.554786852 +0100 +@@ -55,7 +55,7 @@ + } + *w = gif->Image.Width; + *h = gif->Image.Height; +- if(*h > 32767 || *w > 32767) ++ if(*h <= 0 || *h > 32767 || *w <= 0 || *w > 32767) + { + return NULL; + } +diff -Nru imlib-1.9.15.orig/gdk_imlib/io-ppm.c imlib-1.9.15/gdk_imlib/io-ppm.c +--- imlib-1.9.15.orig/gdk_imlib/io-ppm.c 2004-12-23 23:50:22.864493857 +0100 ++++ imlib-1.9.15/gdk_imlib/io-ppm.c 2004-12-23 23:50:36.556785581 +0100 +@@ -53,12 +53,12 @@ + sscanf(s, "%i %i", w, h); + a = *w; + b = *h; +- if (a > 32767) ++ if (a <= 0 || a > 32767) + { + fprintf(stderr, "gdk_imlib ERROR: Image width > 32767 pixels for file\n"); + return NULL; + } +- if (b > 32767) ++ if (b <= 0 || b > 32767) + { + fprintf(stderr, "gdk_imlib ERROR: Image height > 32767 pixels for file\n"); + return NULL; +diff -Nru imlib-1.9.15.orig/gdk_imlib/io-tiff.c imlib-1.9.15/gdk_imlib/io-tiff.c +--- imlib-1.9.15.orig/gdk_imlib/io-tiff.c 2004-12-23 23:50:22.864493857 +0100 ++++ imlib-1.9.15/gdk_imlib/io-tiff.c 2004-12-23 23:50:36.557784945 +0100 +@@ -36,7 +36,9 @@ + npix = ww * hh; + *w = (int)ww; + *h = (int)hh; +- if(ww > 32767 || hh > 32767) ++ if (ww <= 0 || ww > 32767 || ++ hh <= 0 || hh > 32767 || ++ hh >= (G_MAXINT/sizeof(uint32)) / ww) + { + TIFFClose(tif); + return NULL; +diff -Nru imlib-1.9.15.orig/gdk_imlib/io-xpm.c imlib-1.9.15/gdk_imlib/io-xpm.c +--- imlib-1.9.15.orig/gdk_imlib/io-xpm.c 2004-12-23 23:50:22.864493857 +0100 ++++ imlib-1.9.15/gdk_imlib/io-xpm.c 2004-12-23 23:50:36.558784309 +0100 +@@ -40,8 +40,12 @@ + context = 0; + i = j = 0; + cmap = NULL; ++ memset(lookup, 0, sizeof(lookup)); + + line = malloc(lsz); ++ if (!line) ++ return NULL; ++ + while (!done) + { + pc = c; +@@ -70,25 +74,25 @@ + { + /* Header */ + sscanf(line, "%i %i %i %i", w, h, &ncolors, &cpp); +- if (ncolors > 32766) ++ if (ncolors <= 0 || ncolors > 32766) + { + fprintf(stderr, "gdk_imlib ERROR: XPM files wth colors > 32766 not supported\n"); + free(line); + return NULL; + } +- if (cpp > 5) ++ if (cpp <= 0 || cpp > 5) + { + fprintf(stderr, "gdk_imlib ERROR: XPM files with characters per pixel > 5 not supported\n"); + free(line); + return NULL; + } +- if (*w > 32767) ++ if (*w <= 0 || *w > 32767) + { + fprintf(stderr, "gdk_imlib ERROR: Image width > 32767 pixels for file\n"); + free(line); + return NULL; + } +- if (*h > 32767) ++ if (*h <= 0 || *h > 32767) + { + fprintf(stderr, "gdk_imlib ERROR: Image height > 32767 pixels for file\n"); + free(line); +@@ -120,11 +124,13 @@ + { + int slen; + int hascolor, iscolor; ++ int space; + + hascolor = 0; + iscolor = 0; + tok[0] = 0; + col[0] = 0; ++ space = sizeof(col) - 1; + s[0] = 0; + len = strlen(line); + strncpy(cmap[j].str, line, cpp); +@@ -147,10 +153,10 @@ + { + if (k >= len) + { +- if (col[0]) +- strcat(col, " "); +- if (strlen(col) + strlen(s) < sizeof(col)) +- strcat(col, s); ++ if (col[0] && space > 0) ++ strncat(col, " ", space), space -= 1; ++ if (slen <= space) ++ strcat(col, s), space -= slen; + } + if (col[0]) + { +@@ -180,14 +186,17 @@ + } + } + } +- strcpy(tok, s); ++ if (slen < sizeof(tok)) ++ strcpy(tok, s); + col[0] = 0; ++ space = sizeof(col) - 1; + } + else + { +- if (col[0]) +- strcat(col, " "); +- strcat(col, s); ++ if (col[0] && space > 0) ++ strcat(col, " "), space -= 1; ++ if (slen <= space) ++ strcat(col, s), space -= slen; + } + } + } +diff -Nru imlib-1.9.15.orig/gdk_imlib/misc.c imlib-1.9.15/gdk_imlib/misc.c +--- imlib-1.9.15.orig/gdk_imlib/misc.c 2004-12-23 23:50:22.866492586 +0100 ++++ imlib-1.9.15/gdk_imlib/misc.c 2004-12-23 23:50:36.560783038 +0100 +@@ -1355,11 +1355,16 @@ + + /* + * Make sure we don't wrap on our memory allocations ++ * we check G_MAX_INT/4 because rend.c malloc's w * h * bpp ++ * + 3 is safety margin + */ + + void *_gdk_malloc_image(unsigned int w, unsigned int h) + { +- if( w > 32767 || h > 32767) ++ if (w <= 0 || w > 32767 || ++ h <= 0 || h > 32767 || ++ h >= (G_MAXINT/4 - 1) / w) + return NULL; +- return malloc(w * h * 3); ++ return malloc(w * h * 3 + 3); + } ++ +diff -Nru imlib-1.9.15.orig/gdk_imlib/utils.c imlib-1.9.15/gdk_imlib/utils.c +--- imlib-1.9.15.orig/gdk_imlib/utils.c 2004-12-23 23:50:22.869490679 +0100 ++++ imlib-1.9.15/gdk_imlib/utils.c 2004-12-23 23:50:36.563781131 +0100 +@@ -1236,36 +1236,56 @@ + context = 0; + ptr = NULL; + end = NULL; ++ memset(lookup, 0, sizeof(lookup)); + + while (!done) + { + line = data[count++]; ++ if (!line) ++ break; ++ line = strdup(line); ++ if (!line) ++ break; ++ len = strlen(line); ++ for (i = 0; i < len; ++i) ++ { ++ c = line[i]; ++ if (c < 32) ++ line[i] = 32; ++ else if (c > 127) ++ line[i] = 127; ++ } ++ + if (context == 0) + { + /* Header */ + sscanf(line, "%i %i %i %i", &w, &h, &ncolors, &cpp); +- if (ncolors > 32766) ++ if (ncolors <= 0 || ncolors > 32766) + { + fprintf(stderr, "gdk_imlib ERROR: XPM data wth colors > 32766 not supported\n"); + free(im); ++ free(line); + return NULL; + } +- if (cpp > 5) ++ if (cpp <= 0 || cpp > 5) + { + fprintf(stderr, "gdk_imlib ERROR: XPM data with characters per pixel > 5 not supported\n"); + free(im); ++ free(line); + return NULL; + } +- if (w > 32767) ++ if (w <= 0 || w > 32767) + { + fprintf(stderr, "gdk_imlib ERROR: Image width > 32767 pixels for data\n"); + free(im); ++ free(line); + return NULL; + } +- if (h > 32767) ++ if (h <= 0 || h > 32767) + { + fprintf(stderr, "gdk_imlib ERROR: Image height > 32767 pixels for data\n"); + free(im); ++ free(line); + return NULL; + } + cmap = malloc(sizeof(struct _cmap) * ncolors); +@@ -1273,6 +1293,7 @@ + if (!cmap) + { + free(im); ++ free(line); + return NULL; + } + im->rgb_width = w; +@@ -1282,6 +1303,7 @@ + { + free(cmap); + free(im); ++ free(line); + return NULL; + } + im->alpha_data = NULL; +@@ -1355,7 +1377,7 @@ + strcpy(col + colptr, " "); + colptr++; + } +- if (colptr + ls <= sizeof(col)) ++ if (colptr + ls < sizeof(col)) + { + strcpy(col + colptr, s); + colptr += ls; +@@ -1558,6 +1580,7 @@ + } + if ((ptr) && ((ptr - im->rgb_data) >= w * h * 3)) + done = 1; ++ free(line); + } + if (!transp) + {