diff -Naur xorg-x11-6.8.2/xc/lib/Xcursor/autogen.sh xorg-x11-6.8.x.99/xc/lib/Xcursor/autogen.sh --- xorg-x11-6.8.2/xc/lib/Xcursor/autogen.sh 2004-04-23 22:43:40 +0400 +++ xorg-x11-6.8.x.99/xc/lib/Xcursor/autogen.sh 2005-06-30 15:40:09 +0400 @@ -1,3 +1,12 @@ #! /bin/sh + +srcdir=`dirname $0` +test -z "$srcdir" && srcdir=. + +ORIGDIR=`pwd` +cd $srcdir + autoreconf -v --install || exit 1 -./configure --enable-maintainer-mode "$@" +cd $ORIGDIR || exit $? + +$srcdir/configure --enable-maintainer-mode "$@" diff -Naur xorg-x11-6.8.2/xc/lib/Xcursor/ChangeLog xorg-x11-6.8.x.99/xc/lib/Xcursor/ChangeLog --- xorg-x11-6.8.2/xc/lib/Xcursor/ChangeLog 2004-04-23 22:43:40 +0400 +++ xorg-x11-6.8.x.99/xc/lib/Xcursor/ChangeLog 2005-06-30 15:40:09 +0400 @@ -1,4 +1,51 @@ -2004-02-24 Fredrik Höglund +2005-06-30 Daniel Stone + + * lib/Xcursor/file.c: + * lib/Xcursor/library.c: + * lib/Xcursor/xlib.c: + Check arguments for validity on almost all functions. + +2005-06-17 Branden Robinson + + Merge changes from freedesktop.org xorg CVS trunk. + + * cursor.c: + * library.c: + Add preprocessor test for HAVE_XFIXES being defined before testing + its value. [merged by Egbert Eich; author unknown] + + * COPYING: + * ChangeLog: + * Xcursor.3: + * Xcursor.h: + * cursor.c: + * display.c: + * file.c: + * library.c: + * xcursorint.h: + * xlib.c: + Encoding of numerous files changed to UTF-8 [Markus Kuhn] + + * cursor.c: + Bug #1043: Fix leak when creating animated cursors. [Daniel Stone] + +Tue Feb 8 14:26:32 2005 Owen Taylor + + * configure.ac: Remove AC_CONFIG_AUX_DIR() + +2004-04-13 Daniel Stone + + * ChangeLog: + Tag 1.1.3, for xlibs 1.0.1. + +2004-04-07 Keith Packard + + reviewed by: Michel Dänzer + + * configure.ac: + Make sure X_CFLAGS/X_LIBS are substituted in the xcursor.pc file + +2004-02-24 Fredrik Höglund * configure.ac: * xcursorint.h: diff -Naur xorg-x11-6.8.2/xc/lib/Xcursor/configure.ac xorg-x11-6.8.x.99/xc/lib/Xcursor/configure.ac --- xorg-x11-6.8.2/xc/lib/Xcursor/configure.ac 2004-04-23 22:43:40 +0400 +++ xorg-x11-6.8.x.99/xc/lib/Xcursor/configure.ac 2005-06-30 15:40:09 +0400 @@ -30,12 +30,11 @@ dnl Yes, it is a pain to synchronize version numbers. Unfortunately, it's dnl not possible to extract the version number here from Xcursor.h dnl -AC_INIT([libXcursor],1.1.2,[keithp@keithp.com],[libXcursor]) +AC_INIT([libXcursor],1.1.4,[keithp@keithp.com],[libXcursor]) AM_INIT_AUTOMAKE([dist-bzip2]) AC_CONFIG_SRCDIR([Makefile.am]) AM_MAINTAINER_MODE AM_CONFIG_HEADER(config.h) -AC_CONFIG_AUX_DIR(.) dnl libtool versioning @@ -102,6 +101,9 @@ fi fi +AC_SUBST(X_CFLAGS) +AC_SUBST(X_LIBS) + PKG_CHECK_MODULES(XRENDER, xrender >= 0.8.2, [xrender_found_with_pkgconfig=yes], [xrender_found_with_pkgconfig=no]) case "$xrender_found_with_pkgconfig" in diff -Naur xorg-x11-6.8.2/xc/lib/Xcursor/cursor.c xorg-x11-6.8.x.99/xc/lib/Xcursor/cursor.c --- xorg-x11-6.8.2/xc/lib/Xcursor/cursor.c 2004-04-23 22:43:40 +0400 +++ xorg-x11-6.8.x.99/xc/lib/Xcursor/cursor.c 2005-06-30 15:40:09 +0400 @@ -711,6 +712,7 @@ anim[n].delay = images->images[n]->delay; } cursor = XRenderCreateAnimCursor (dpy, cursors->ncursor, anim); + XcursorCursorsDestroy(cursors); free (anim); } #if defined HAVE_XFIXES && XFIXES_MAJOR >= 2 diff -Naur xorg-x11-6.8.2/xc/lib/Xcursor/file.c xorg-x11-6.8.x.99/xc/lib/Xcursor/file.c --- xorg-x11-6.8.2/xc/lib/Xcursor/file.c 2004-04-23 22:43:40 +0400 +++ xorg-x11-6.8.x.99/xc/lib/Xcursor/file.c 2005-06-30 15:40:09 +0400 @@ -46,7 +47,8 @@ void XcursorImageDestroy (XcursorImage *image) { - free (image); + if (image) + free (image); } XcursorImages * @@ -69,6 +71,9 @@ { int n; + if (!images) + return; + for (n = 0; n < images->nimage; n++) XcursorImageDestroy (images->images[n]); if (images->name) @@ -79,10 +84,16 @@ void XcursorImagesSetName (XcursorImages *images, const char *name) { - char *new = malloc (strlen (name) + 1); + char *new; + + if (!images || !name) + return; + + new = malloc (strlen (name) + 1); if (!new) return; + strcpy (new, name); if (images->name) free (images->name); @@ -110,7 +121,8 @@ void XcursorCommentDestroy (XcursorComment *comment) { - free (comment); + if (!comment) + free (comment); } XcursorComments * @@ -132,6 +144,9 @@ { int n; + if (!comments) + return; + for (n = 0; n < comments->ncomment; n++) XcursorCommentDestroy (comments->comments[n]); free (comments); @@ -142,6 +157,9 @@ { unsigned char bytes[4]; + if (!file || !u) + return XcursorFalse; + if ((*file->read) (file, bytes, 4) != 4) return XcursorFalse; *u = ((bytes[0] << 0) | @@ -154,7 +172,7 @@ static XcursorBool _XcursorReadBytes (XcursorFile *file, char *bytes, int length) { - if ((*file->read) (file, (unsigned char *) bytes, length) != length) + if (!file || !bytes || (*file->read) (file, (unsigned char *) bytes, length) != length) return XcursorFalse; return XcursorTrue; } @@ -164,6 +182,9 @@ { unsigned char bytes[4]; + if (!file) + return XcursorFalse; + bytes[0] = u; bytes[1] = u >> 8; bytes[2] = u >> 16; @@ -176,7 +197,7 @@ static XcursorBool _XcursorWriteBytes (XcursorFile *file, char *bytes, int length) { - if ((*file->write) (file, (unsigned char *) bytes, length) != length) + if (!file || !bytes || (*file->write) (file, (unsigned char *) bytes, length) != length) return XcursorFalse; return XcursorTrue; } @@ -184,7 +205,8 @@ static void _XcursorFileHeaderDestroy (XcursorFileHeader *fileHeader) { - free (fileHeader); + if (!fileHeader) + free (fileHeader); } static XcursorFileHeader * @@ -212,6 +234,9 @@ XcursorFileHeader head, *fileHeader; XcursorUInt skip; int n; + + if (!file) + return NULL; if (!_XcursorReadUInt (file, &head.magic)) return 0; @@ -262,6 +287,9 @@ _XcursorWriteFileHeader (XcursorFile *file, XcursorFileHeader *fileHeader) { int toc; + + if (!file || !fileHeader) + return XcursorFalse; if (!_XcursorWriteUInt (file, fileHeader->magic)) return XcursorFalse; @@ -288,7 +316,8 @@ XcursorFileHeader *fileHeader, int toc) { - if ((*file->seek) (file, fileHeader->tocs[toc].position, SEEK_SET) == EOF) + if (!file || !fileHeader || \ + (*file->seek) (file, fileHeader->tocs[toc].position, SEEK_SET) == EOF) return XcursorFalse; return XcursorTrue; } @@ -299,6 +328,8 @@ int toc, XcursorChunkHeader *chunkHeader) { + if (!file || !fileHeader || !chunkHeader) + return XcursorFalse; if (!_XcursorSeekToToc (file, fileHeader, toc)) return XcursorFalse; if (!_XcursorReadUInt (file, &chunkHeader->header)) @@ -322,6 +353,8 @@ int toc, XcursorChunkHeader *chunkHeader) { + if (!file || !fileHeader || !chunkHeader) + return XcursorFalse; if (!_XcursorSeekToToc (file, fileHeader, toc)) return XcursorFalse; if (!_XcursorWriteUInt (file, chunkHeader->header)) @@ -347,6 +380,9 @@ XcursorDim bestSize = 0; XcursorDim thisSize; + if (!fileHeader || !nsizesp) + return 0; + for (n = 0; n < fileHeader->ntoc; n++) { if (fileHeader->tocs[n].type != XCURSOR_IMAGE_TYPE) @@ -372,6 +408,9 @@ int toc; XcursorDim thisSize; + if (!fileHeader) + return 0; + for (toc = 0; toc < fileHeader->ntoc; toc++) { if (fileHeader->tocs[toc].type != XCURSOR_IMAGE_TYPE) @@ -399,6 +438,9 @@ int n; XcursorPixel *p; + if (!file || !fileHeader) + return NULL; + if (!_XcursorFileReadChunkHeader (file, fileHeader, toc, &chunkHeader)) return 0; if (!_XcursorReadUInt (file, &head.width)) @@ -444,6 +486,9 @@ static XcursorUInt _XcursorImageLength (XcursorImage *image) { + if (!image) + return 0; + return XCURSOR_IMAGE_HEADER_LEN + (image->width * image->height) * 4; } @@ -457,6 +502,9 @@ int n; XcursorPixel *p; + if (!file || !fileHeader || !image) + return XcursorFalse; + /* sanity check data */ if (image->width > XCURSOR_IMAGE_MAX_SIZE || image->height > XCURSOR_IMAGE_MAX_SIZE) @@ -508,6 +556,9 @@ XcursorUInt length; XcursorComment *comment; + if (!file || !fileHeader) + return NULL; + /* read chunk header */ if (!_XcursorFileReadChunkHeader (file, fileHeader, toc, &chunkHeader)) return 0; @@ -541,6 +592,9 @@ XcursorChunkHeader chunkHeader; XcursorUInt length; + if (!file || !fileHeader || !comment || !comment->comment) + return XcursorFalse; + length = strlen (comment->comment); /* sanity check data */ @@ -600,7 +654,7 @@ int n; int toc; - if (size < 0) + if (!file || size < 0) return 0; fileHeader = _XcursorReadFileHeader (file); if (!fileHeader) @@ -641,6 +695,9 @@ int n; int toc; + if (!file) + return 0; + fileHeader = _XcursorReadFileHeader (file); if (!fileHeader) return 0; @@ -692,6 +749,8 @@ XcursorComments *comments; int toc; + if (!file) + return 0; fileHeader = _XcursorReadFileHeader (file); if (!fileHeader) return 0; @@ -762,6 +821,9 @@ int n; int toc; + if (!file || !comments || !images) + return XcursorFalse; + fileHeader = _XcursorFileHeaderCreate (comments->ncomment + images->nimage); if (!fileHeader) return XcursorFalse; @@ -861,6 +923,9 @@ { XcursorFile f; + if (!file) + return NULL; + _XcursorStdioFileInitialize (file, &f); return XcursorXcFileLoadImage (&f, size); } @@ -870,6 +935,9 @@ { XcursorFile f; + if (!file) + return NULL; + _XcursorStdioFileInitialize (file, &f); return XcursorXcFileLoadImages (&f, size); } @@ -879,6 +947,9 @@ { XcursorFile f; + if (!file) + return NULL; + _XcursorStdioFileInitialize (file, &f); return XcursorXcFileLoadAllImages (&f); } @@ -890,6 +961,9 @@ { XcursorFile f; + if (!file || !commentsp || !imagesp) + return XcursorFalse; + _XcursorStdioFileInitialize (file, &f); return XcursorXcFileLoad (&f, commentsp, imagesp); } @@ -900,7 +974,7 @@ XcursorComments *comments = XcursorCommentsCreate (0); XcursorFile f; XcursorBool ret; - if (!comments) + if (!comments || !file || !images) return 0; _XcursorStdioFileInitialize (file, &f); ret = XcursorXcFileSave (&f, comments, images) && fflush (file) != EOF; @@ -914,6 +988,9 @@ const XcursorImages *images) { XcursorFile f; + + if (!file || !comments || !images) + return XcursorFalse; _XcursorStdioFileInitialize (file, &f); return XcursorXcFileSave (&f, comments, images) && fflush (file) != EOF; @@ -925,6 +1002,9 @@ FILE *f; XcursorImage *image; + if (!file || size < 0) + return NULL; + f = fopen (file, "r"); if (!f) return 0; @@ -939,6 +1019,9 @@ FILE *f; XcursorImages *images; + if (!file || size < 0) + return NULL; + f = fopen (file, "r"); if (!f) return 0; @@ -953,6 +1036,9 @@ FILE *f; XcursorImages *images; + if (!file) + return NULL; + f = fopen (file, "r"); if (!f) return 0; @@ -969,6 +1055,9 @@ FILE *f; XcursorBool ret; + if (!file) + return XcursorFalse; + f = fopen (file, "r"); if (!f) return 0; @@ -983,6 +1072,9 @@ FILE *f; XcursorBool ret; + if (!file || !images) + return XcursorFalse; + f = fopen (file, "w"); if (!f) return 0; @@ -998,10 +1090,12 @@ FILE *f; XcursorBool ret; + if (!file || !comments || !images) + return XcursorFalse; + f = fopen (file, "w"); if (!f) return 0; ret = XcursorFileSave (f, comments, images); return fclose (f) != EOF && ret; } - diff -Naur xorg-x11-6.8.2/xc/lib/Xcursor/Imakefile xorg-x11-6.8.x.99/xc/lib/Xcursor/Imakefile --- xorg-x11-6.8.2/xc/lib/Xcursor/Imakefile 2004-04-23 22:43:40 +0400 +++ xorg-x11-6.8.x.99/xc/lib/Xcursor/Imakefile 2005-06-30 15:40:09 +0400 @@ -27,7 +27,7 @@ REQUIREDLIBS = $(LDPRELIB) $(XRENDERLIB) #endif -XCURSOR_VERSION=1.1.2 +XCURSOR_VERSION=1.1.4 XRENDER_LIBS=$(XRENDERLIB) XRENDER_CFLAGS=$(XRENDERINCLUDES) diff -Naur xorg-x11-6.8.2/xc/lib/Xcursor/library.c xorg-x11-6.8.x.99/xc/lib/Xcursor/library.c --- xorg-x11-6.8.2/xc/lib/Xcursor/library.c 2004-04-23 22:43:40 +0400 +++ xorg-x11-6.8.x.99/xc/lib/Xcursor/library.c 2005-06-30 15:40:09 +0400 @@ -80,6 +81,9 @@ int themelen; int len; + if (!dir || !theme) + return NULL; + colon = strchr (dir, ':'); if (!colon) colon = dir + strlen (dir); @@ -127,6 +131,9 @@ { char *full; + if (!dir || !subdir || !file) + return NULL; + full = malloc (strlen (dir) + 1 + strlen (subdir) + 1 + strlen (file) + 1); if (!full) return 0; @@ -157,6 +164,9 @@ char *result = 0; FILE *f; + if (!full) + return NULL; + f = fopen (full, "r"); if (f) { @@ -207,6 +217,9 @@ char *inherits = 0; const char *i; + if (!theme || !name) + return NULL; + /* * XCURSOR_CORE_THEME is a magic name; cursors from the core set * are never found in any directory. Instead, a magic value is @@ -259,6 +272,9 @@ FILE *f = 0; XcursorImage *image = 0; + if (!file) + return NULL; + if (theme) f = XcursorScanTheme (theme, file); if (!f) @@ -279,6 +295,9 @@ FILE *f = 0; XcursorImages *images = 0; + if (!file) + return NULL; + if (theme) f = XcursorScanTheme (theme, file); if (!f) @@ -303,6 +322,9 @@ XcursorImages *images = XcursorLibraryLoadImages (file, theme, size); Cursor cursor; + if (!file) + return 0; + if (!images) { int id = XcursorLibraryShape (file); @@ -328,6 +350,9 @@ XcursorImages *images = XcursorLibraryLoadImages (file, theme, size); XcursorCursors *cursors; + if (!file) + return NULL; + if (!images) { int id = XcursorLibraryShape (file); diff -Naur xorg-x11-6.8.2/xc/lib/Xcursor/Xcursor.h xorg-x11-6.8.x.99/xc/lib/Xcursor/Xcursor.h --- xorg-x11-6.8.2/xc/lib/Xcursor/Xcursor.h 2004-04-23 22:43:40 +0400 +++ xorg-x11-6.8.x.99/xc/lib/Xcursor/Xcursor.h 2005-06-30 15:40:09 +0400 @@ -76,7 +77,7 @@ #define XCURSOR_LIB_MAJOR 1 #define XCURSOR_LIB_MINOR 1 -#define XCURSOR_LIB_REVISION 2 +#define XCURSOR_LIB_REVISION 4 #define XCURSOR_LIB_VERSION ((XCURSOR_LIB_MAJOR * 10000) + \ (XCURSOR_LIB_MINOR * 100) + \ (XCURSOR_LIB_REVISION)) diff -Naur xorg-x11-6.8.2/xc/lib/Xcursor/xlib.c xorg-x11-6.8.x.99/xc/lib/Xcursor/xlib.c --- xorg-x11-6.8.2/xc/lib/Xcursor/xlib.c 2004-04-23 22:43:40 +0400 +++ xorg-x11-6.8.x.99/xc/lib/Xcursor/xlib.c 2005-06-30 15:40:09 +0400 @@ -36,6 +37,9 @@ int n; Atom cursor; + if (!dpy || !font) + return XcursorFalse; + if (font == dpy->cursor_font) return XcursorTrue; @@ -86,6 +90,9 @@ XColor _Xconst *background) { Cursor cursor = None; + + if (!dpy || !source_font || !mask_font || !foreground || !background) + return 0; if (!XcursorSupportsARGB (dpy) && !XcursorGetThemeCore (dpy)) return None; @@ -120,6 +127,9 @@ int replace = 0; XcursorBitmapInfo *bmi; + if (!dpy) + return; + if (!XcursorSupportsARGB (dpy) && !XcursorGetThemeCore (dpy)) return; @@ -160,9 +170,14 @@ static XcursorBitmapInfo * _XcursorGetBitmap (Display *dpy, Pixmap bitmap) { - XcursorDisplayInfo *info = _XcursorGetDisplayInfo (dpy); + XcursorDisplayInfo *info; int i; + if (!dpy || !bitmap) + return NULL; + + info = _XcursorGetDisplayInfo (dpy); + if (!info) return 0; LockDisplay (dpy); @@ -233,6 +248,9 @@ int low_addr; Bool bit_swap; + if (!image) + return; + for (i = 0; i < XCURSOR_BITMAP_HASH_SIZE; i++) hash[i] = 0; /* @@ -302,6 +320,9 @@ XImage *image) { XcursorBitmapInfo *bmi; + + if (!dpy || !image) + return; if (!XcursorSupportsARGB (dpy) && !XcursorGetThemeCore (dpy)) return; @@ -383,6 +404,9 @@ int i; Cursor cursor; + if (!dpy || !foreground || !background) + return 0; + if (!XcursorSupportsARGB (dpy) && !XcursorGetThemeCore (dpy)) return None;