Package: graphicsmagick Version: 1.3.5-5 Severity: important Tags: patch Hello,
graphicsmagick currently FTBFS on hurd-i386 because it unconditionally uses PATH_MAX, while POSIX says that this may not be defined when there is no such limitation in the system, which is the case for the Hurd. The attached patch fixes this. Samuel -- System Information: Debian Release: squeeze/sid APT prefers testing APT policy: (990, 'testing'), (500, 'unstable'), (500, 'stable'), (1, 'experimental') Architecture: amd64 (x86_64) Kernel: Linux 2.6.30 (SMP w/2 CPU cores) Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/bash -- Samuel Thibault <samuel.thiba...@fnac.net> <O> ?a peut ?tre une madeleine ? sous munitions (avec des composants, par exemple) -+- #runtime -+-
--- graphicsmagick-1.3.5.orig/magick/utility.c +++ graphicsmagick-1.3.5/magick/utility.c @@ -1255,32 +1255,52 @@ some other systems use compatible schemes. */ int - length; + length, + ret; long pid; char - link_path[MaxTextExtent], - real_path[PATH_MAX+1]; + link_path[MaxTextExtent]; + + char * + real_path = NULL; + + struct stat + linkbuf; pid=(long) getpid(); /* Linux format */ FormatString(link_path,"/proc/%ld/exe",pid); - length=readlink(link_path, real_path, PATH_MAX); - if (length == -1) + ret = lstat(link_path, &linkbuf); + if (ret == 0) + { + real_path = malloc(linkbuf.st_size + 1); + length=readlink(link_path, real_path, linkbuf.st_size); + } + if ((ret != 0) || (length == -1)) { /* Try FreeBSD format */ FormatString(link_path,"/proc/%ld/file",pid); - length=readlink(link_path, real_path, PATH_MAX); + ret = lstat(link_path, &linkbuf); + if (ret == 0) + { + real_path = realloc(real_path, linkbuf.st_size + 1); + length=readlink(link_path, real_path, linkbuf.st_size); + } } - if ((length > 0) && (length <= PATH_MAX)) + if ((ret == 0) && (length > 0) && (length <= linkbuf.st_size)) { real_path[length]=0; if (strlcpy(path,real_path,MaxTextExtent) < MaxTextExtent) if (IsAccessible(path)) - return(MagickPass); + { + free(real_path); + return(MagickPass); + } } + free(real_path); } #endif return(MagickFail);