tag 428055 + patch thanks The segfaults during startup on ia64 are due to a bug in Debian-specific patch 06_libpaper_support.dpatch: Due to a missing declaration, the pointer returned by libpaper's systempapername() in imainarg.c::gs_main_init_with_args() gets truncated, and gs segfaults a few lines later when trying to dereference it. This bug should occur on each 64bit platform, but apparently it's only fatal on ia64. It's easily fixed with an #include of paper.h. I'm attaching an updated 06_libpaper_support.dpatch. (Incidentially, I've also prepared and tested updated packages. So far, they're only used locally, but if you want to save yourself a bit of work, just drop me a note and I can upload them as an NMU with no extra effort.)
Regards, Daniel.
#! /bin/sh -e ## 06_libpaper_support.dpatch by Masayuki Hatta <[EMAIL PROTECTED]> ## ## All lines beginning with \`## DP:' are a description of the patch. ## DP: Adds libpaper support if [ $# -ne 1 ]; then echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" exit 1 fi case "$1" in -patch) patch -f --no-backup-if-mismatch --dry-run -p1 < $0 && patch -f --no-backup-if-mismatch -p1 < $0 ;; -unpatch) patch -f --no-backup-if-mismatch -R -p1 < $0;; *) echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" exit 1;; esac exit 0 @DPATCH@ diff -urNad gs-gpl-8.56.dfsg.1~/lib/gs_init.ps gs-gpl-8.56.dfsg.1/lib/gs_init.ps --- gs-gpl-8.56.dfsg.1~/lib/gs_init.ps 2007-02-24 15:32:48.000000000 +0000 +++ gs-gpl-8.56.dfsg.1/lib/gs_init.ps 2007-06-13 20:23:32.000000000 +0000 @@ -73,6 +73,13 @@ % devices that default to letter or A4 can be changed by setting % DEFAULTPAPERSIZE. % /DEFAULTPAPERSIZE (a4) def +% Debian: Libpaper's default is in DEFPAPERSIZE; use that if the +% current device is not "cups". +currentdict /DEFPAPERSIZE known +currentdict /DEVICE known { DEVICE } { () } ifelse +(cups) ne and + { DEFPAPERSIZE /PAPERSIZE where { pop pop } { /PAPERSIZE exch def } ifelse } +if % Turn on array packing for the rest of initialization. true setpacking diff -urNad gs-gpl-8.56.dfsg.1~/src/imainarg.c gs-gpl-8.56.dfsg.1/src/imainarg.c --- gs-gpl-8.56.dfsg.1~/src/imainarg.c 2007-01-17 21:10:47.000000000 +0000 +++ gs-gpl-8.56.dfsg.1/src/imainarg.c 2007-06-13 20:23:49.000000000 +0000 @@ -17,6 +17,7 @@ #include "memory_.h" #include "string_.h" #include <stdlib.h> /* for qsort */ +#include <paper.h> #include "ghost.h" #include "gp.h" @@ -198,6 +199,29 @@ return e_Fatal; } } + + /* Change by Torsten Landschoff <[EMAIL PROTECTED]>: + * If no papersize is given on the commandline we want gs to use the + * default papersize of the system. This change differs from the old + * Debian change in that it does not use arg_push_string and therefore + * is not using up the nesting depth. + * -- Thu, 30 Mar 2000 21:28:25 +0200 + * + * Applied to GPL/AFPL GhostScript by Masayuki Hatta + * -- Wed Mar 24 15:00:00 JST 2004 */ + + { + const char *paper = systempapername(); + static char paperswitch[15+40+1] = "-sDEFPAPERSIZE="; + /* strlen("-sDEFPAPERSIZE") + 40 + space for '\0' */ + + if (paper != NULL) { + strncat(paperswitch, paper, 40); + swproc(minst, paperswitch, &args); + /* args is not modified since a "-s" argument does not need + * such special handling */ + } + } while ((arg = arg_next(&args, &code)) != 0) { switch (*arg) { case '-':