summaryrefslogtreecommitdiff
path: root/print/ghostscript9-x11/files/patch-base-gp_unix.c
diff options
context:
space:
mode:
authorHiroki Sato <hrs@FreeBSD.org>2015-08-22 17:48:35 +0000
committerHiroki Sato <hrs@FreeBSD.org>2015-08-22 17:48:35 +0000
commit27470e1676e69455acf06ae25ebd42ebd5bdecdb (patch)
tree445c3e315f03aa972de87391f921c655e4634f60 /print/ghostscript9-x11/files/patch-base-gp_unix.c
parentRemove textproc/prosper. The latest version is included in (diff)
- Split ghostscript into X11-independent and -dependent parts:
* print/ghostscript{7,8,9,9-agpl}-base Installs Ghostscript binary, libgs, and related files. These ports do not depend on X11 libraries (i.e. x11* devices are not available). USES=ghostscript will set dependency on one of them depending on GHOSTSCRIPT_DEFAULT. The default device is set to "display" or "bbox". * print/ghostscript{7,8,9,9-agpl}-x11 Installs a shared library which provides X11 support to the installed Ghostscript binaries. x11* devices will be enabled when the library is available. This depends on *-base (RUN_DEPENDS). USES=ghostscript:x11 will set dependency on one of them. - Fix integer overflow reported as CVE-2015-3228. - Update Uses/ghostscript.mk: * Add x11 keyword. nox11 keyword is now obsolete. * Use packagename in *_DEPENDS line to prevent relationship between -base and -x11 packages from being broken. - Fix x11/nox11 keyword and bump PORTREVISION in ports using USES=ghostscript to update dependency of pre-compiled packages.
Diffstat (limited to 'print/ghostscript9-x11/files/patch-base-gp_unix.c')
-rw-r--r--print/ghostscript9-x11/files/patch-base-gp_unix.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/print/ghostscript9-x11/files/patch-base-gp_unix.c b/print/ghostscript9-x11/files/patch-base-gp_unix.c
new file mode 100644
index 000000000000..277ef51a22ab
--- /dev/null
+++ b/print/ghostscript9-x11/files/patch-base-gp_unix.c
@@ -0,0 +1,47 @@
+--- base/gp_unix.c.orig 2012-08-08 17:01:36.000000000 +0900
++++ base/gp_unix.c 2015-08-20 15:15:51.166042000 +0900
+@@ -52,6 +52,7 @@
+ * and applied as a patch (preferable).
+ */
+ #include <sys/types.h>
++#include <limits.h>
+ #include <dirent.h>
+ #include <dlfcn.h>
+ #include <string.h>
+@@ -61,26 +62,25 @@
+ {
+ DIR* dir = NULL;
+ struct dirent* dirent;
+- char buff[1024];
++ char buff[PATH_MAX];
+ char* pbuff;
+ void* handle;
+ void (*gs_shared_init)(void);
+
+- strncpy(buff, GS_DEVS_SHARED_DIR, sizeof(buff) - 2);
+- pbuff = buff + strlen(buff);
+- *pbuff++ = '/'; *pbuff = '\0';
+-
+ dir = opendir(GS_DEVS_SHARED_DIR);
+ if (dir == 0) return;
+
+ while ((dirent = readdir(dir)) != 0) {
+- strncpy(pbuff, dirent->d_name, sizeof(buff) - (pbuff - buff) - 1);
+- if ((handle = dlopen(buff, RTLD_NOW)) != 0) {
+- if ((gs_shared_init = dlsym(handle, "gs_shared_init")) != 0) {
++ snprintf(buff, sizeof(buff), "%s/%s", GS_DEVS_SHARED_DIR, dirent->d_name);
++ pbuff = buff + strlen(buff) - 3;
++ if (strcmp(pbuff, ".so") != 0)
++ continue;
++ handle = dlopen(buff, RTLD_NOW);
++ if (handle == NULL)
++ continue;
++ gs_shared_init = dlsym(handle, "gs_shared_init");
++ if (gs_shared_init != NULL)
+ (*gs_shared_init)();
+- } else {
+- }
+- }
+ }
+
+ closedir(dir);