X Strike Force XFree86 SVN commit: r2274 - in branches/4.3.0/sid/debian: . local patches po
Author: fabbione
Date: 2005-06-01 00:00:12 -0500 (Wed, 01 Jun 2005)
New Revision: 2274
Modified:
branches/4.3.0/sid/debian/CHANGESETS
branches/4.3.0/sid/debian/TODO
branches/4.3.0/sid/debian/changelog
branches/4.3.0/sid/debian/local/dexconf
branches/4.3.0/sid/debian/patches/000_stolen_from_HEAD.diff
branches/4.3.0/sid/debian/patches/000_stolen_from_xorg.diff
branches/4.3.0/sid/debian/patches/087_SECURITY_libXpm_vulnerabilities.diff
branches/4.3.0/sid/debian/po/es.po
Log:
Merge revisions 2258:HEAD from trunk in preparation for 4.3.0.dfsg.1-14
release.
Modified: branches/4.3.0/sid/debian/CHANGESETS
===================================================================
--- branches/4.3.0/sid/debian/CHANGESETS 2005-05-29 17:46:37 UTC (rev 2273)
+++ branches/4.3.0/sid/debian/CHANGESETS 2005-06-01 05:00:12 UTC (rev 2274)
@@ -8,135 +8,47 @@
(It should always be safe to merge the latest version of TODO or CHANGESETS
files anywhere.)
-Miscellaneous cosmetic fixes.
- 2231, 2232, 2252
+Backport libxpm from X.org stable release (099za_libxpm_spopen_fix.diff).
+(Closes: #308783)
+ 2259, 2262, 2263, 2264
-Update Spanish debconf template translations (thanks, Javier
-Fernández-Sanguino Peña). (Closes: #298538)
- 2207
+Fix grammar error in Spanish debconf template translations (thanks, Steve
+Langasek). (Closes: #309450)
+ 2266
-Fix CAN-2005-0605: libxpm4's scan.c file may allow attackers to execute
-arbitrary code via a negative bitmap_unit value that leads to a buffer
-overflow. (Closes: #299272)
- 2217
+Add documentation of what should (and should not) go in
+000_stolen_from_HEAD.diff at the top of the file.
+ 2268
-Update FAQ entry "What is the story with XFree86's license?" to clarify
-wording and add a bit of future-proofing, per request from Daniel Stone.
- 2218
+Grab fixes from freedesktop.org xorg CVS that make the DPMS extension
+header (dpms.h) and Xpm library header file (xpm.h) usable with C++ code
+by using the _XFUNCPROTO{BEGIN,END} macros instead of nothing at all (in
+the DPMS case) or a literal 'extern "C" {' construct (in the XPM case).
+C++ applications using the DPMS headers were likely to crash; see
+<URL: https://bugs.freedesktop.org/show_bug.cgi?id=830 >. The DPMS fix
+also adds a header self-inclusion guard to dpms.h.
+ 2269
-Update FAQ to remove hyperlinks to the ViewCVS installation on
-necrotic.deadbeast.net, which no longer exists, and replace hyperlinks to
-snapshots of the xfree86 repository with hyperlinks to the Apache-served
-xfree86 repository itself.
- 2219
+Replace s_popen()-based fix for CAN-2004-0914 with a better fix from
+freedesktop.org xorg CVS. There were several problems with s_popen(),
+some merely functional, and some themselves security-flawed. There does
+not appear to be a MITRE CVE candidate ID for this problem. The only
+differences between the Xpm library code in this package release and that
+in freedesktop.org xorg CVS HEAD as of 2005-05-26 are 1) whitespace
+differences; 2) RCS keyword differences; 3) preprocessor directives to
+support autotoolization of the library; 4) support for pre-ANSI C
+compilers in function declarations; 5) removal of some dead code in
+create.c; and 6) preprocessor-enforced ignorance of PutPixel32() on 64-bit
+systems (whose implementation was already disabled on 64-bit systems).
+(Closes: #308783)
+ 2270, 2271
-Update FAQ entry "How can I help debug the XFree86 X server?" to include
-instructions on attaching GDB to a running X server process, and advice on
-how to recover the console while the X server is wedged.
- 2220, 2221
+Invert sense of tests invoking has_multiplexed_mouse; the comments were
+right, but the logic was exactly backwards. This should fix warp-speed
+and left-handed configuration mouse device problems introduced (or simply
+not fixed for USB and PS/2 mouse users of Linux 2.6) in -13. Thanks to
+Steve Langasek for eyeballing the code and catching my thinko.
+(Closes: #311184)
+ 2272, 2273
-Update FAQ entry "What is the story with XFree86 3.x?" to remove
-CAN-2004-0914 as a potential security threat -- XFree86 3.x did not ship
-the Xpm library, which that advisory covered.
- 2222
-
-In lxterm, redirect the standard error output of "locale charmap" to
-/dev/null so that we don't attempt to parse it. Thanks to Denis Barbier
-for pointing this out.
- 2225
-
-Update xfonts-100dpi-transcoded and xfonts-75dpi-transcoded's postinst and
-postrm scripts to stop invoking update-fonts-alias; these packages ship no
-font aliases, and can provoke warnings from that command if their
-non-transcoded counterpart packages are not installed. Thanks to Gregory
-Colpart for catching this. (Closes: #287221)
- 2226, 2254
-
-Stop using non-POSIX "local" keyword in shell-lib.sh.
- 2233
-
-Fix xdm's prerm script to remove /etc/X11/default-display-manager if the
-corresponding debconf question has disappeared (meaning that the last package
-which provided that shared template is being removed); this enables a clean
-purge of the /etc/X11 directory (among the xfree86 packages, at least).
- 2234
-
-Add dependencies on xfree86-common to every package that ships files in
-/usr/X11R6 and doesn't already have such a dependency; this ensures that
-the files located there are always locatable via the
-/usr/{bin,include,lib}/X11 symbolic links provided by xfree86-common.
- 2235
-
-Enhance xdm's logrotate configuration per Andrew Suffield.
-+ Rotate log file weekly.
-+ Keep logs around for one year.
-+ Compress log files.
-+ Delay compression of log files until after they've been rotated.
-(Closes: #285871)
- 2238
-
-Make xdm support log rotation properly.
-+ Write patch #099x.
- - Implement new ReopenLogFile() and ReopenLogFileNotify() functions.
- ReopenLogFileNotify() is a signal handler for SIGUSR2.
- - Move the definition of the WRITES() macro from error.c to dm_error.h
- so that dm.c can use it as well.
- - Document xdm's signal handling in its manpage.
-+ Update xdm's logrotate configuration to add a postrotate script which
- signals xdm with SIGUSR2.
-(Closes: #303688)
- 2240
-
-Revert XLC_LOCALE/zh_TW.UTF-8 to the version shipped in 4.3.0.dfsg.1-6.
-Tetralet explained that Chinese users are likely to have the unifont
-package installed because it is part of Chinese tasks, and this font
-covers all needed glyphs. With this font, having ISO10646 listed first
-in this file is harmless, whereas GTK1.2 apps are unreadable when it is
-at the bottom of this file. (Closes: #296719)
- 2241
-
-Grab patches by Thomas Winischhofer from freedesktop.org's xorg CVS which
-fix the busted MiscPassMessage() extension implementation in xfree86 which
-1) copies from an invalid memory location, and 2) has memory leaks --
-neither is a good trait in a setuid root program like the X server.
-(Closes: #285807)
- 2242
-
-Grab patches by Chisato Yamauchi, David Dawes, and Marc Aurele La France
-from xfree86 CVS (none later than 2004-01-12), to perform bounds checking
-on font metrics and avoid SEGVs in xfs and the X server. Resync patch
-#099v. (Closes: #284448)
- 2243
-
-Apply patches from Alex Williamson (also in freedesktop.org xorg CVS) to
-make the XFree86 X server's ELF object loader ensure cache coherency on
-IA64. Resync patch #071. (Closes: #303461)
- 2244, 2246
-
-Update dexconf to use a new function, has_multiplexed_mouse(), to check
-the Linux kernel version and only write a "Generic Mouse" InputDevice
-stanza (and reference to it in the ServerLayout section) if the
-"Configured Mouse" is not a device type multiplexed through
-/dev/input/mice. In Linux 2.4, only /dev/input/mouse* devices were
-treated this way, but now PS/2 and serial mouse devices are as well. This
-resolves problems with button remapping and doubled mouse events which
-caused "warp speed" mouse motion. (Closes: #269407)
-Replace mouse configuration code in xserver-xfree86.config.in with a
-function, configure_mouse(), which performs the same functions but adds
-knowledge of many more mouse types and attempts to guess a reasonable
-default mouse device (dependent on architecture and even sub-architecture
-in some cases) in the event detection does not work. Add copious amounts
-of debugging statements (suppressed by default). Among other things, this
-adds support for the /dev/adbmouse device node used on Apple Desktop
-Bus-equipped Macintoshes. (Closes: #293527)
- 2248, 2249, 2253
-
-Fix translation error in Brazilian Portguese debconf template
-translations. (Thanks, André Luís Lopes!) (Closes: #308506)
- 2250
-
-Add Vietnamese debconf template translations. (Thanks, Clytie Siddall!)
-(Closes: #308422)
- 2251
-
vim:set ai et sts=4 sw=4 tw=80:
Modified: branches/4.3.0/sid/debian/TODO
===================================================================
--- branches/4.3.0/sid/debian/TODO 2005-05-29 17:46:37 UTC (rev 2273)
+++ branches/4.3.0/sid/debian/TODO 2005-06-01 05:00:12 UTC (rev 2274)
@@ -14,7 +14,7 @@
scheduled. However, the package release manager can put an explicit freeze on
those by marking the package version section accordingly.
-4.3.0.dfsg.1-13
+4.3.0.dfsg.1-14
---------------
Post 4.3.0-1
Modified: branches/4.3.0/sid/debian/changelog
===================================================================
--- branches/4.3.0/sid/debian/changelog 2005-05-29 17:46:37 UTC (rev 2273)
+++ branches/4.3.0/sid/debian/changelog 2005-06-01 05:00:12 UTC (rev 2274)
@@ -1,3 +1,44 @@
+xfree86 (4.3.0.dfsg.1-13+SVN) unstable; urgency=high
+
+ Urgency set to high due to fix for security flaw (see below).
+
+ Changes by David Nusinow and Branden Robinson:
+
+ * Replace s_popen()-based fix for CAN-2004-0914 with a better fix from
+ freedesktop.org xorg CVS. There were several problems with s_popen(),
+ some merely functional, and some themselves security-flawed. There does
+ not appear to be a MITRE CVE candidate ID for this problem. The only
+ differences between the Xpm library code in this package release and that
+ in freedesktop.org xorg CVS HEAD as of 2005-05-26 are 1) whitespace
+ differences; 2) RCS keyword differences; 3) preprocessor directives to
+ support autotoolization of the library; 4) support for pre-ANSI C
+ compilers in function declarations; 5) removal of some dead code in
+ create.c; and 6) preprocessor-enforced ignorance of PutPixel32() on 64-bit
+ systems (whose implementation was already disabled on 64-bit systems).
+ (Closes: #308783)
+
+ Changes by Branden Robinson:
+
+ * Fix grammar error in Spanish debconf template translations (thanks, Steve
+ Langasek). (Closes: #309450)
+
+ * Grab fixes from freedesktop.org xorg CVS that make the DPMS extension
+ header (dpms.h) and Xpm library header file (xpm.h) usable with C++ code
+ by using the _XFUNCPROTO{BEGIN,END} macros instead of nothing at all (in
+ the DPMS case) or a literal 'extern "C" {' construct (in the XPM case).
+ C++ applications using the DPMS headers were likely to crash; see
+ <URL: https://bugs.freedesktop.org/show_bug.cgi?id=830 >. The DPMS fix
+ also adds a header self-inclusion guard to dpms.h.
+
+ * Invert sense of tests invoking has_multiplexed_mouse; the comments were
+ right, but the logic was exactly backwards. This should fix warp-speed
+ and left-handed configuration mouse device problems introduced (or simply
+ not fixed for USB and PS/2 mouse users of Linux 2.6) in -13. Thanks to
+ Steve Langasek for eyeballing the code and catching my thinko.
+ (Closes: #311184)
+
+ -- Branden Robinson <branden@debian.org> Sun, 29 May 2005 12:31:57 -0500
+
xfree86 (4.3.0.dfsg.1-13) unstable; urgency=high
Urgency set to high due to fix for security flaw CAN-2005-0605 (see below).
Modified: branches/4.3.0/sid/debian/local/dexconf
===================================================================
--- branches/4.3.0/sid/debian/local/dexconf 2005-05-29 17:46:37 UTC (rev 2273)
+++ branches/4.3.0/sid/debian/local/dexconf 2005-06-01 05:00:12 UTC (rev 2274)
@@ -355,7 +355,7 @@
# we probably also need an init script to rewrite XF86Config-4 on system boot
# for people who switch back and forth between these kernels, or some people
# will get "doubled" mouse events. Sigh.
-if has_multiplexed_mouse; then
+if ! has_multiplexed_mouse; then
cat >&4 <<SECTION
Section "InputDevice"
Identifier "Generic Mouse"
@@ -458,7 +458,7 @@
InputDevice "Generic Keyboard"
InputDevice "Configured Mouse"
SECTION
-if has_multiplexed_mouse; then
+if ! has_multiplexed_mouse; then
printf "\tInputDevice\t\"Generic Mouse\"\n" >&4
fi
printf "EndSection\n" >&4
Modified: branches/4.3.0/sid/debian/patches/000_stolen_from_HEAD.diff
===================================================================
--- branches/4.3.0/sid/debian/patches/000_stolen_from_HEAD.diff 2005-05-29 17:46:37 UTC (rev 2273)
+++ branches/4.3.0/sid/debian/patches/000_stolen_from_HEAD.diff 2005-06-01 05:00:12 UTC (rev 2274)
@@ -1,5 +1,11 @@
$Id$
+These patches come from XFree86 CVS HEAD in the period after 4.3.0 was
+tagged, but before the mass relicensing on 2004-02-13.
+
+Patches from freedesktop.org's xorg CVS module go in a separate file,
+000_stolen_from_xorg.diff.
+
[Do not recode this file!]
Comments by Branden Robinson are made in [brackets].
Modified: branches/4.3.0/sid/debian/patches/000_stolen_from_xorg.diff
===================================================================
--- branches/4.3.0/sid/debian/patches/000_stolen_from_xorg.diff 2005-05-29 17:46:37 UTC (rev 2273)
+++ branches/4.3.0/sid/debian/patches/000_stolen_from_xorg.diff 2005-06-01 05:00:12 UTC (rev 2274)
@@ -37,6 +37,24 @@
flush to ensure the icache is coherent when modules
are loaded (Alex Williamson). [Egbert Eich]
+xc/include/extensions/dpms.h @ 1.3
+ 2004-12-07 Roland Mainz <roland.mainz@nrubsig.org>
+ * xc/include/extensions/dpms.h
+ Bugzilla #830 (https://bugs.freedesktop.org/show_bug.cgi?id=830):
+ Get DPMS header file (include/extensions/dpms.h) working with C++
+ applications.
+ Patch by Kevin DeKorte <kdekorte@yahoo.com> and Roland
+ Mainz <roland.mainz@nrubsig.org>.
+
+xc/extras/Xpm/lib/xpm.h @ 1.3
+ 2004-12-07 Roland Mainz <roland.mainz@nrubsig.org>
+ * xc/extras/Xpm/lib/xpm.h
+ Bugzilla #830 (https://bugs.freedesktop.org/show_bug.cgi?id=830):
+ Fix libXpm header (xpm.h) to use the X11 function begin/end marker
+ macros (_XFUNCPROTOBEGIN, _XFUNCPROTOEND) instead of homegrown
+ (native) C++ code.
+ Patch by Kevin DeKorte <kdekorte@yahoo.com>.
+
diff -Naurd xc.orig/programs/Xserver/hw/xfree86/common/xf86str.h xc/programs/Xserver/hw/xfree86/common/xf86str.h
--- xc.orig/programs/Xserver/hw/xfree86/common/xf86str.h 2004-09-15 10:05:46.000000000 +0000
+++ xc/programs/Xserver/hw/xfree86/common/xf86str.h 2004-09-15 10:14:05.000000000 +0000
@@ -484,3 +502,59 @@
break;
#endif
case SHT_SYMTAB:
+--- xc/include/extensions/dpms.h~ 2005-05-25 01:42:55.393907910 -0500
++++ xc/include/extensions/dpms.h 2005-05-25 01:43:05.857875701 -0500
+@@ -28,6 +28,9 @@
+ ******************************************************************/
+ /* $XFree86: xc/include/extensions/dpms.h,v 3.5 2001/01/17 17:53:20 dawes Exp $ */
+
++#ifndef _X11_EXTENSIONS_DPMS_H
++#define _X11_EXTENSIONS_DPMS_H 1
++
+ /*
+ * HISTORY
+ */
+@@ -46,6 +49,8 @@
+ #include <X11/X.h>
+ #include <X11/Xmd.h>
+
++_XFUNCPROTOBEGIN
++
+ extern Bool DPMSQueryExtension(Display *, int *, int *);
+ extern Status DPMSGetVersion(Display *, int *, int *);
+ extern Bool DPMSCapable(Display *);
+@@ -55,6 +60,8 @@
+ extern Status DPMSDisable(Display *);
+ extern Status DPMSForceLevel(Display *, CARD16);
+ extern Status DPMSInfo(Display *, CARD16 *, BOOL *);
+-#endif
+
++_XFUNCPROTOEND
++#endif /* !DPMS_SERVER */
++#endif /* !_X11_EXTENSIONS_DPMS_H */
+
+--- xc/extras/Xpm/lib/xpm.h~ 2005-05-25 01:34:38.697475999 -0500
++++ xc/extras/Xpm/lib/xpm.h 2005-05-25 01:35:29.022204683 -0500
+@@ -303,9 +303,7 @@
+ * functions declarations
+ */
+
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
++_XFUNCPROTOBEGIN
+
+ /* FOR_MSW, all ..Pixmap.. are excluded, only the ..XImage.. are used */
+ /* Same for Amiga! */
+@@ -459,10 +457,7 @@
+
+ FUNC(XpmFree, void, (void *ptr));
+
+-#ifdef __cplusplus
+-} /* for C++ V2.0 */
+-#endif
+-
++_XFUNCPROTOEND
+
+ /* backward compatibility */
+
Modified: branches/4.3.0/sid/debian/patches/087_SECURITY_libXpm_vulnerabilities.diff
===================================================================
--- branches/4.3.0/sid/debian/patches/087_SECURITY_libXpm_vulnerabilities.diff 2005-05-29 17:46:37 UTC (rev 2273)
+++ branches/4.3.0/sid/debian/patches/087_SECURITY_libXpm_vulnerabilities.diff 2005-06-01 05:00:12 UTC (rev 2274)
@@ -137,11 +137,48 @@
( https://bugs.freedesktop.org/show_bug.cgi?id=1920 )
-This patch by Matthieu Herrb and others.
+Patch updated on 2005-05-25 to replace s_popen()-based fix for
+CAN-2004-0914 with a better fix from X.Org CVS HEAD. There were several
+problems with s_popen(), some merely functional, and some themselves
+security-flawed. There does not appear to be a MITRE CVE candidate ID for
+this problem. Quoting Matej Vela:
-diff -urN xc~/extras/Xpm/lib/Attrib.c xc/extras/Xpm/lib/Attrib.c
---- xc~/extras/Xpm/lib/Attrib.c 2005-03-13 01:32:36.000000000 -0500
-+++ xc/extras/Xpm/lib/Attrib.c 2005-03-13 01:34:39.000000000 -0500
+ The CAN-2004-0914 patch introduced a s_popen() function as a safe
+ replacement for popen(). Instead of invoking a shell, it splits
+ arguments on whitespace and passes the command directly to execvp(3).
+ However, it doesn't handle quoting or redirection, so code like
+
+ WrFFrI.c:339: snprintf(buf, sizeof(buf), "gzip -q > \"%s\"", filename);
+ WrFFrI.c:340: if (!(mdata->stream.file = s_popen(buf, "w")))
+
+ results in a ">" argument and superfluous quotes:
+
+ execve("/bin/gzip", ["gzip", ">", "\"foo.gz\""], [/* 19 vars */])
+
+ This completely breaks the transparent compression and decompression.
+
+ Furthermore, since gzip processes all arguments regardless of errors, an
+ attacker can use filenames with whitespace to compress arbitrary files:
+ (xpmtest taken from <https://bugs.freedesktop.org/show_bug.cgi?id=1920>)
+
+ # ./xpmtest crab.xpm 'fnord -v /etc/hosts.deny fnord.gz'
+ w=28, h=28, cpp=2, cols=6, vmask=00000000, hotspot=0,0
+ gzip: >: No such file or directory
+ gzip: "fnord: No such file or directory
+ /etc/hosts.deny: -50.0% -- replaced with /etc/hosts.deny.gz
+ gzip: fnord.gz": No such file or directory
+
+ The above would effectively disable TCP wrappers. The -r option can be
+ used to compress whole directory trees.
+
+ s_popen() also has issues with error handling, signals, and runaway child
+ processes.
+
+This patch by Matthieu Herrb, Alex Reisen, and others.
+
+diff -urN xc/extras/Xpm/lib~/Attrib.c xc/extras/Xpm/lib/Attrib.c
+--- xc/extras/Xpm/lib~/Attrib.c 2005-05-25 02:24:33.256307715 -0500
++++ xc/extras/Xpm/lib/Attrib.c 2005-05-25 01:58:18.000000000 -0500
@@ -32,13 +32,15 @@
* Developed by Arnaud Le Hors *
\*****************************************************************************/
@@ -198,9 +235,9 @@
for (i = 0, ext = extensions; i < nextensions; i++, ext++) {
if (ext->name)
XpmFree(ext->name);
-diff -urN xc~/extras/Xpm/lib/CrBufFrI.c xc/extras/Xpm/lib/CrBufFrI.c
---- xc~/extras/Xpm/lib/CrBufFrI.c 2005-03-13 01:32:36.000000000 -0500
-+++ xc/extras/Xpm/lib/CrBufFrI.c 2005-03-13 01:34:39.000000000 -0500
+diff -urN xc/extras/Xpm/lib~/CrBufFrI.c xc/extras/Xpm/lib/CrBufFrI.c
+--- xc/extras/Xpm/lib~/CrBufFrI.c 2005-05-25 02:24:33.258307720 -0500
++++ xc/extras/Xpm/lib/CrBufFrI.c 2005-05-25 01:58:18.000000000 -0500
@@ -31,6 +31,9 @@
* *
* Developed by Arnaud Le Hors *
@@ -505,9 +542,9 @@
if (info->hints_cmt)
size += 5 + strlen(info->hints_cmt);
-diff -urN xc~/extras/Xpm/lib/CrDatFrI.c xc/extras/Xpm/lib/CrDatFrI.c
---- xc~/extras/Xpm/lib/CrDatFrI.c 2005-03-13 01:32:36.000000000 -0500
-+++ xc/extras/Xpm/lib/CrDatFrI.c 2005-03-13 01:34:39.000000000 -0500
+diff -urN xc/extras/Xpm/lib~/CrDatFrI.c xc/extras/Xpm/lib/CrDatFrI.c
+--- xc/extras/Xpm/lib~/CrDatFrI.c 2005-05-25 02:24:33.260307725 -0500
++++ xc/extras/Xpm/lib/CrDatFrI.c 2005-05-25 01:58:18.000000000 -0500
@@ -33,13 +33,16 @@
\*****************************************************************************/
/* $XFree86: xc/extras/Xpm/lib/CrDatFrI.c,v 1.2 2001/10/28 03:32:09 tsi Exp $ */
@@ -736,30 +773,9 @@
for (y = 0, line = ext->lines; y < b; y++, line++) {
strcpy(*dataptr, *line);
a++;
-diff -urN xc~/extras/Xpm/lib/Imakefile xc/extras/Xpm/lib/Imakefile
---- xc~/extras/Xpm/lib/Imakefile 2005-03-13 01:32:36.000000000 -0500
-+++ xc/extras/Xpm/lib/Imakefile 2005-03-13 01:34:39.000000000 -0500
-@@ -104,13 +104,15 @@
- CrBufFrI.c CrDatFrP.c CrPFrBuf.c RdFToI.c WrFFrI.c \
- CrBufFrP.c CrIFrBuf.c CrPFrDat.c RdFToP.c WrFFrP.c \
- CrDatFrI.c CrIFrDat.c RdFToDat.c WrFFrDat.c \
-- Attrib.c CrIFrP.c CrPFrI.c Image.c Info.c RdFToBuf.c WrFFrBuf.c
-+ Attrib.c CrIFrP.c CrPFrI.c Image.c Info.c RdFToBuf.c WrFFrBuf.c \
-+ s_popen.c
-
- OBJS = data.o create.o misc.o rgb.o scan.o parse.o hashtab.o \
- CrBufFrI.o CrDatFrP.o CrPFrBuf.o RdFToI.o WrFFrI.o \
- CrBufFrP.o CrIFrBuf.o CrPFrDat.o RdFToP.o WrFFrP.o \
- CrDatFrI.o CrIFrDat.o RdFToDat.o WrFFrDat.o \
-- Attrib.o CrIFrP.o CrPFrI.o Image.o Info.o RdFToBuf.o WrFFrBuf.o
-+ Attrib.o CrIFrP.o CrPFrI.o Image.o Info.o RdFToBuf.o WrFFrBuf.o \
-+ s_popen.o
-
- INCLUDES = -I.
- LINTLIBS = $(LINTXTOLL) $(LINTXLIB)
-diff -urN xc~/extras/Xpm/lib/RdFToBuf.c xc/extras/Xpm/lib/RdFToBuf.c
---- xc~/extras/Xpm/lib/RdFToBuf.c 2005-03-13 01:32:36.000000000 -0500
-+++ xc/extras/Xpm/lib/RdFToBuf.c 2005-03-13 01:34:39.000000000 -0500
+diff -urN xc/extras/Xpm/lib~/RdFToBuf.c xc/extras/Xpm/lib/RdFToBuf.c
+--- xc/extras/Xpm/lib~/RdFToBuf.c 2005-05-25 02:24:33.262307731 -0500
++++ xc/extras/Xpm/lib/RdFToBuf.c 2005-05-25 01:58:18.000000000 -0500
@@ -37,6 +37,8 @@
* HeDu (hedu@cul-ipn.uni-kiel.de) 4/94
*/
@@ -788,95 +804,240 @@
ptr = (char *) XpmMalloc(len + 1);
if (!ptr) {
fclose(fp);
-diff -urN xc~/extras/Xpm/lib/RdFToI.c xc/extras/Xpm/lib/RdFToI.c
---- xc~/extras/Xpm/lib/RdFToI.c 2005-03-13 01:32:36.000000000 -0500
-+++ xc/extras/Xpm/lib/RdFToI.c 2005-03-13 01:34:39.000000000 -0500
-@@ -33,6 +33,8 @@
+diff -urN xc/extras/Xpm/lib~/RdFToI.c xc/extras/Xpm/lib/RdFToI.c
+--- xc/extras/Xpm/lib~/RdFToI.c 2005-05-25 02:24:33.264307736 -0500
++++ xc/extras/Xpm/lib/RdFToI.c 2005-05-25 02:08:19.000000000 -0500
+@@ -33,16 +33,14 @@
\*****************************************************************************/
/* $XFree86: xc/extras/Xpm/lib/RdFToI.c,v 1.2 2001/10/28 03:32:09 tsi Exp $ */
+/* October 2004, source code review by Thomas Biege <thomas@suse.de> */
+
#include "XpmI.h"
- #include <sys/stat.h>
- #if !defined(NO_ZPIPE) && defined(WIN32)
-@@ -123,6 +125,12 @@
+-#include <sys/stat.h>
+-#if !defined(NO_ZPIPE) && defined(WIN32)
+-# define popen _popen
+-# define pclose _pclose
+-# if defined(STAT_ZFILE)
+-# include <io.h>
+-# define stat _stat
+-# define fstat _fstat
+-# endif
++#ifndef NO_ZPIPE
++#include <fcntl.h>
++#include <errno.h>
++#include <sys/types.h>
++#include <sys/wait.h>
+ #endif
+
+ LFUNC(OpenReadFile, int, (char *filename, xpmData *mdata));
+@@ -120,6 +118,67 @@
+ }
+ #endif /* CXPMPROG */
+
++#ifndef NO_ZPIPE
++/* Do not depend on errno after read_through */
++FILE*
++xpmPipeThrough(fd, cmd, arg1, mode)
++ int fd;
++ const char* cmd;
++ const char* arg1;
++ const char* mode;
++{
++ FILE* fp;
++ int status, fds[2], in = 0, out = 1;
++ pid_t pid;
++ if ( 'w' == *mode )
++ out = 0, in = 1;
++ if ( pipe(fds) < 0 )
++ return NULL;
++ pid = fork();
++ if ( pid < 0 )
++ goto fail1;
++ if ( 0 == pid )
++ {
++ close(fds[in]);
++ if ( dup2(fds[out], out) < 0 )
++ goto err;
++ close(fds[out]);
++ if ( dup2(fd, in) < 0 )
++ goto err;
++ close(fd);
++ pid = fork();
++ if ( pid < 0 )
++ goto err;
++ if ( 0 == pid )
++ {
++ execlp(cmd, cmd, arg1, NULL);
++ perror(cmd);
++ goto err;
++ }
++ _exit(0);
++ err:
++ _exit(1);
++ }
++ close(fds[out]);
++ /* calling process: wait for first child */
++ while ( waitpid(pid, &status, 0) < 0 && EINTR == errno )
++ ;
++ if ( WIFSIGNALED(status) ||
++ (WIFEXITED(status) && WEXITSTATUS(status) != 0) )
++ goto fail2;
++ fp = fdopen(fds[in], mode);
++ if ( !fp )
++ goto fail2;
++ close(fd); /* still open in 2nd child */
++ return fp;
++fail1:
++ close(fds[out]);
++fail2:
++ close(fds[in]);
++ return NULL;
++}
++#endif
++
/*
* open the given file to be read as an xpmData which is returned.
*/
-+#ifndef NO_ZPIPE
-+ FILE *s_popen(char *cmd, const char *type);
-+#else
-+# define s_popen popen
-+#endif
-+
- static int
- OpenReadFile(filename, mdata)
+@@ -128,72 +187,62 @@
char *filename;
-@@ -141,17 +149,20 @@
+ xpmData *mdata;
+ {
+-#ifndef NO_ZPIPE
+- char buf[BUFSIZ];
+-# ifdef STAT_ZFILE
+- char *compressfile;
+- struct stat status;
+-# endif
+-#endif
+-
+ if (!filename) {
+ mdata->stream.file = (stdin);
mdata->type = XPMFILE;
} else {
- #ifndef NO_ZPIPE
+-#ifndef NO_ZPIPE
- int len = strlen(filename);
-+ size_t len = strlen(filename);
-+
-+ if (len == 0)
-+ return(XpmOpenFailed);
- if ((len > 2) && !strcmp(".Z", filename + (len - 2))) {
- mdata->type = XPMPIPE;
+- if ((len > 2) && !strcmp(".Z", filename + (len - 2))) {
+- mdata->type = XPMPIPE;
- sprintf(buf, "uncompress -c \"%s\"", filename);
- if (!(mdata->stream.file = popen(buf, "r")))
-+ snprintf(buf, sizeof(buf), "uncompress -c \"%s\"", filename);
-+ if (!(mdata->stream.file = s_popen(buf, "r")))
- return (XpmOpenFailed);
-
- } else if ((len > 3) && !strcmp(".gz", filename + (len - 3))) {
- mdata->type = XPMPIPE;
+- return (XpmOpenFailed);
+-
+- } else if ((len > 3) && !strcmp(".gz", filename + (len - 3))) {
+- mdata->type = XPMPIPE;
- sprintf(buf, "gunzip -qc \"%s\"", filename);
- if (!(mdata->stream.file = popen(buf, "r")))
-+ snprintf(buf, sizeof(buf), "gunzip -qc \"%s\"", filename);
-+ if (!(mdata->stream.file = s_popen(buf, "r")))
- return (XpmOpenFailed);
-
- } else {
-@@ -159,19 +170,19 @@
- if (!(compressfile = (char *) XpmMalloc(len + 4)))
+- return (XpmOpenFailed);
+-
+- } else {
+-# ifdef STAT_ZFILE
+- if (!(compressfile = (char *) XpmMalloc(len + 4)))
++ int fd = open(filename, O_RDONLY);
++#if defined(NO_ZPIPE)
++ if ( fd < 0 )
++ return XpmOpenFailed;
++#else
++ const char* ext = NULL;
++ if ( fd >= 0 )
++ ext = strrchr(filename, '.');
++#ifdef STAT_ZFILE /* searching for z-files if the given name not found */
++ else
++ {
++ size_t len = strlen(filename);
++ char *compressfile = (char *) XpmMalloc(len + 4);
++ if ( !compressfile )
return (XpmNoMemory);
-
+-
- sprintf(compressfile, "%s.Z", filename);
-+ snprintf(compressfile, len+4, "%s.Z", filename);
- if (!stat(compressfile, &status)) {
+- if (!stat(compressfile, &status)) {
- sprintf(buf, "uncompress -c \"%s\"", compressfile);
- if (!(mdata->stream.file = popen(buf, "r"))) {
-+ snprintf(buf, sizeof(buf), "uncompress -c \"%s\"", compressfile);
-+ if (!(mdata->stream.file = s_popen(buf, "r"))) {
++ strcpy(compressfile, filename);
++ strcpy(compressfile + len, ext = ".Z");
++ fd = open(compressfile, O_RDONLY);
++ if ( fd < 0 )
++ {
++ strcpy(compressfile + len, ext = ".gz");
++ fd = open(compressfile, O_RDONLY);
++ if ( fd < 0 )
++ {
XpmFree(compressfile);
- return (XpmOpenFailed);
- }
- mdata->type = XPMPIPE;
- } else {
+- return (XpmOpenFailed);
+- }
+- mdata->type = XPMPIPE;
+- } else {
- sprintf(compressfile, "%s.gz", filename);
-+ snprintf(compressfile, len+4, "%s.gz", filename);
- if (!stat(compressfile, &status)) {
+- if (!stat(compressfile, &status)) {
- sprintf(buf, "gunzip -c \"%s\"", compressfile);
- if (!(mdata->stream.file = popen(buf, "r"))) {
-+ snprintf(buf, sizeof(buf), "gunzip -c \"%s\"", compressfile);
-+ if (!(mdata->stream.file = s_popen(buf, "r"))) {
- XpmFree(compressfile);
- return (XpmOpenFailed);
- }
-@@ -217,7 +228,7 @@
- break;
- #ifndef NO_ZPIPE
- case XPMPIPE:
+- XpmFree(compressfile);
+- return (XpmOpenFailed);
+- }
+- mdata->type = XPMPIPE;
+- } else {
+-# endif
+-#endif
+- if (!(mdata->stream.file = fopen(filename, "r"))) {
+-#if !defined(NO_ZPIPE) && defined(STAT_ZFILE)
+- XpmFree(compressfile);
+-#endif
+- return (XpmOpenFailed);
+- }
+- mdata->type = XPMFILE;
+-#ifndef NO_ZPIPE
+-# ifdef STAT_ZFILE
++ return XpmOpenFailed;
+ }
+ }
+ XpmFree(compressfile);
+-# endif
+ }
+ #endif
++ if ( ext && !strcmp(ext, ".Z") )
++ {
++ mdata->type = XPMPIPE;
++ mdata->stream.file = xpmPipeThrough(fd, "uncompress", "-c", "r");
++ }
++ else if ( ext && !strcmp(ext, ".gz") )
++ {
++ mdata->type = XPMPIPE;
++ mdata->stream.file = xpmPipeThrough(fd, "gunzip", "-qc", "r");
++ }
++ else
++#endif /* z-files */
++ {
++ mdata->type = XPMFILE;
++ mdata->stream.file = fdopen(fd, "r");
++ }
++ if (!mdata->stream.file)
++ {
++ close(fd);
++ return (XpmOpenFailed);
++ }
+ }
+ mdata->CommentLength = 0;
+ #ifdef CXPMPROG
+@@ -210,15 +259,6 @@
+ xpmDataClose(mdata)
+ xpmData *mdata;
+ {
+- switch (mdata->type) {
+- case XPMFILE:
+- if (mdata->stream.file != (stdin))
+- fclose(mdata->stream.file);
+- break;
+-#ifndef NO_ZPIPE
+- case XPMPIPE:
- pclose(mdata->stream.file);
+- break;
+-#endif
+- }
++ if (mdata->stream.file != (stdin))
+ fclose(mdata->stream.file);
- break;
- #endif
- }
-diff -urN xc~/extras/Xpm/lib/WrFFrBuf.c xc/extras/Xpm/lib/WrFFrBuf.c
---- xc~/extras/Xpm/lib/WrFFrBuf.c 2005-03-13 01:32:36.000000000 -0500
-+++ xc/extras/Xpm/lib/WrFFrBuf.c 2005-03-13 01:34:39.000000000 -0500
+ }
+diff -urN xc/extras/Xpm/lib~/WrFFrBuf.c xc/extras/Xpm/lib/WrFFrBuf.c
+--- xc/extras/Xpm/lib~/WrFFrBuf.c 2005-05-25 02:24:33.265307739 -0500
++++ xc/extras/Xpm/lib/WrFFrBuf.c 2005-05-25 01:58:18.000000000 -0500
@@ -32,6 +32,8 @@
* Developed by Arnaud Le Hors *
\*****************************************************************************/
@@ -895,19 +1056,27 @@
return XpmSuccess;
}
-diff -urN xc~/extras/Xpm/lib/WrFFrI.c xc/extras/Xpm/lib/WrFFrI.c
---- xc~/extras/Xpm/lib/WrFFrI.c 2005-03-13 01:32:36.000000000 -0500
-+++ xc/extras/Xpm/lib/WrFFrI.c 2005-03-13 01:34:39.000000000 -0500
-@@ -38,6 +38,8 @@
- * Lorens Younes (d93-hyo@nada.kth.se) 4/96
+diff -urN xc/extras/Xpm/lib~/WrFFrI.c xc/extras/Xpm/lib/WrFFrI.c
+--- xc/extras/Xpm/lib~/WrFFrI.c 2005-05-25 02:24:33.266307741 -0500
++++ xc/extras/Xpm/lib/WrFFrI.c 2005-05-25 02:15:16.000000000 -0500
+@@ -39,9 +39,13 @@
*/
-+/* October 2004, source code review by Thomas Biege <thomas@suse.de> */
+ #include "XpmI.h"
+-#if !defined(NO_ZPIPE) && defined(WIN32)
+-# define popen _popen
+-# define pclose _pclose
+
- #include "XpmI.h"
- #if !defined(NO_ZPIPE) && defined(WIN32)
- # define popen _popen
-@@ -98,7 +100,7 @@
++#ifndef NO_ZPIPE
++#include "sys/wait.h"
++#include "sys/types.h"
++#include "fcntl.h"
++#include "unistd.h"
++#include "errno.h"
+ #endif
+
+ /* MS Windows define a function called WriteFile @#%#&!!! */
+@@ -98,7 +102,7 @@
XpmInfo *info;
{
xpmData mdata;
@@ -916,85 +1085,115 @@
int ErrorStatus;
/* open file to write */
-@@ -121,7 +123,8 @@
+@@ -121,7 +125,8 @@
#endif
/* let's try to make a valid C syntax name */
if (index(name, '.')) {
- strcpy(new_name, name);
+ strncpy(new_name, name, sizeof(new_name));
-+ new_name[sizeof(new_name)-1] = 0;
++ new_name[sizeof(new_name)-1] = '\0';
/* change '.' to '_' */
name = s = new_name;
while ((dot = index(s, '.'))) {
-@@ -131,7 +134,8 @@
- }
- if (index(name, '-')) {
- if (name != new_name) {
-- strcpy(new_name, name);
-+ strncpy(new_name, name, sizeof(new_name));
-+ new_name[sizeof(new_name)-1] = 0;
- name = new_name;
- }
- /* change '-' to '_' */
-@@ -248,6 +252,8 @@
+@@ -248,6 +253,8 @@
unsigned int x, y, h;
h = height - 1;
-+ if (cpp != 0 && width >= (UINT_MAX - 3)/cpp)
++ if (cpp != 0 && width >= (UINT_MAX - 3)/cpp)
+ return XpmNoMemory;
p = buf = (char *) XpmMalloc(width * cpp + 3);
if (!buf)
return (XpmNoMemory);
-@@ -298,6 +304,11 @@
+@@ -295,6 +302,14 @@
+ fprintf(file, ",\n\"XPMENDEXT\"");
+ }
+
++
++#ifndef NO_ZPIPE
++FUNC(xpmPipeThrough, FILE*, (int fd,
++ const char* cmd,
++ const char* arg1,
++ const char* mode));
++#endif
++
/*
* open the given file to be written as an xpmData which is returned
*/
-+#ifndef NO_ZPIPE
-+ FILE *s_popen(char *cmd, const char *type);
-+#else
-+# define s_popen popen
-+#endif
- static int
- OpenWriteFile(filename, mdata)
+@@ -303,38 +318,32 @@
char *filename;
-@@ -313,16 +324,20 @@
+ xpmData *mdata;
+ {
+-#ifndef NO_ZPIPE
+- char buf[BUFSIZ];
+-
+-#endif
+-
+ if (!filename) {
+ mdata->stream.file = (stdout);
mdata->type = XPMFILE;
} else {
#ifndef NO_ZPIPE
- int len = strlen(filename);
-+ size_t len = strlen(filename);
-+
-+ if (len == 0)
-+ return(XpmOpenFailed);
-+
++ size_t len;
++#endif
++ int fd = open(filename, O_WRONLY|O_CREAT|O_TRUNC, 0644);
++ if ( fd < 0 )
++ return(XpmOpenFailed);
++#ifndef NO_ZPIPE
++ len = strlen(filename);
if (len > 2 && !strcmp(".Z", filename + (len - 2))) {
- sprintf(buf, "compress > \"%s\"", filename);
- if (!(mdata->stream.file = popen(buf, "w")))
-+ snprintf(buf, sizeof(buf), "compress > \"%s\"", filename);
-+ if (!(mdata->stream.file = s_popen(buf, "w")))
- return (XpmOpenFailed);
-
+- return (XpmOpenFailed);
+-
++ mdata->stream.file = xpmPipeThrough(fd, "compress", NULL, "w");
mdata->type = XPMPIPE;
} else if (len > 3 && !strcmp(".gz", filename + (len - 3))) {
- sprintf(buf, "gzip -q > \"%s\"", filename);
- if (!(mdata->stream.file = popen(buf, "w")))
-+ snprintf(buf, sizeof(buf), "gzip -q > \"%s\"", filename);
-+ if (!(mdata->stream.file = s_popen(buf, "w")))
- return (XpmOpenFailed);
-
+- return (XpmOpenFailed);
+-
++ mdata->stream.file = xpmPipeThrough(fd, "gzip", "-q", "w");
mdata->type = XPMPIPE;
-@@ -353,7 +368,7 @@
- break;
- #ifndef NO_ZPIPE
- case XPMPIPE:
+- } else {
++ } else
+ #endif
+- if (!(mdata->stream.file = fopen(filename, "w")))
+- return (XpmOpenFailed);
+-
++ {
++ mdata->stream.file = fdopen(fd, "w");
+ mdata->type = XPMFILE;
+-#ifndef NO_ZPIPE
+ }
+-#endif
++ if (!mdata->stream.file)
++ return (XpmOpenFailed);
+ }
+ return (XpmSuccess);
+ }
+@@ -346,15 +355,7 @@
+ xpmDataClose(mdata)
+ xpmData *mdata;
+ {
+- switch (mdata->type) {
+- case XPMFILE:
+- if (mdata->stream.file != (stdout))
+- fclose(mdata->stream.file);
+- break;
+-#ifndef NO_ZPIPE
+- case XPMPIPE:
- pclose(mdata->stream.file);
+- break;
+-#endif
+- }
++ if (mdata->stream.file != (stdout))
+ fclose(mdata->stream.file);
- break;
- #endif
- }
-diff -urN xc~/extras/Xpm/lib/XpmI.h xc/extras/Xpm/lib/XpmI.h
---- xc~/extras/Xpm/lib/XpmI.h 2005-03-13 01:32:36.000000000 -0500
-+++ xc/extras/Xpm/lib/XpmI.h 2005-03-13 01:34:39.000000000 -0500
+ }
++
+diff -urN xc/extras/Xpm/lib~/XpmI.h xc/extras/Xpm/lib/XpmI.h
+--- xc/extras/Xpm/lib~/XpmI.h 2005-05-25 02:24:33.267307744 -0500
++++ xc/extras/Xpm/lib/XpmI.h 2005-05-25 01:58:18.000000000 -0500
@@ -49,8 +49,10 @@
* lets try to solve include files
*/
@@ -1038,9 +1237,9 @@
xpmHashAtom *atomTable;
} xpmHashTable;
-diff -urN xc~/extras/Xpm/lib/create.c xc/extras/Xpm/lib/create.c
---- xc~/extras/Xpm/lib/create.c 2005-03-13 01:32:36.000000000 -0500
-+++ xc/extras/Xpm/lib/create.c 2005-03-13 01:39:04.000000000 -0500
+diff -urN xc/extras/Xpm/lib~/create.c xc/extras/Xpm/lib/create.c
+--- xc/extras/Xpm/lib~/create.c 2005-05-25 02:24:33.272307757 -0500
++++ xc/extras/Xpm/lib/create.c 2005-05-25 01:58:18.000000000 -0500
@@ -1,3 +1,4 @@
+/* $XdotOrg: pre-CVS proposed fix for CESA-2004-003 alanc 7/25/2004 $ */
/*
@@ -1391,9 +1590,9 @@
buf[cpp] = '\0';
if (USE_HASHTABLE) {
xpmHashAtom *slot;
-diff -urN xc~/extras/Xpm/lib/data.c xc/extras/Xpm/lib/data.c
---- xc~/extras/Xpm/lib/data.c 2005-03-13 01:32:36.000000000 -0500
-+++ xc/extras/Xpm/lib/data.c 2005-03-13 01:34:39.000000000 -0500
+diff -urN xc/extras/Xpm/lib~/data.c xc/extras/Xpm/lib/data.c
+--- xc/extras/Xpm/lib~/data.c 2005-05-25 02:24:33.274307762 -0500
++++ xc/extras/Xpm/lib/data.c 2005-05-25 01:58:18.000000000 -0500
@@ -33,6 +33,8 @@
\*****************************************************************************/
/* $XFree86: xc/extras/Xpm/lib/data.c,v 1.4 2002/01/07 19:40:49 dawes Exp $ */
@@ -1433,9 +1632,9 @@
int l, n = 0;
if (data->type) {
-diff -urN xc~/extras/Xpm/lib/hashtab.c xc/extras/Xpm/lib/hashtab.c
---- xc~/extras/Xpm/lib/hashtab.c 2005-03-13 01:32:36.000000000 -0500
-+++ xc/extras/Xpm/lib/hashtab.c 2005-03-13 01:34:39.000000000 -0500
+diff -urN xc/extras/Xpm/lib~/hashtab.c xc/extras/Xpm/lib/hashtab.c
+--- xc/extras/Xpm/lib~/hashtab.c 2005-05-25 02:24:33.275307765 -0500
++++ xc/extras/Xpm/lib/hashtab.c 2005-05-25 01:58:18.000000000 -0500
@@ -135,15 +135,17 @@
xpmHashTable *table;
{
@@ -1465,9 +1664,9 @@
atomTable = (xpmHashAtom *) XpmMalloc(table->size * sizeof(*atomTable));
if (!atomTable)
return (XpmNoMemory);
-diff -urN xc~/extras/Xpm/lib/misc.c xc/extras/Xpm/lib/misc.c
---- xc~/extras/Xpm/lib/misc.c 2005-03-13 01:32:36.000000000 -0500
-+++ xc/extras/Xpm/lib/misc.c 2005-03-13 01:34:39.000000000 -0500
+diff -urN xc/extras/Xpm/lib~/misc.c xc/extras/Xpm/lib/misc.c
+--- xc/extras/Xpm/lib~/misc.c 2005-05-25 02:24:33.276307767 -0500
++++ xc/extras/Xpm/lib/misc.c 2005-05-25 01:58:18.000000000 -0500
@@ -44,7 +44,7 @@
char *s1;
{
@@ -1477,9 +1676,9 @@
if (s2 = (char *) XpmMalloc(l))
strcpy(s2, s1);
-diff -urN xc~/extras/Xpm/lib/parse.c xc/extras/Xpm/lib/parse.c
---- xc~/extras/Xpm/lib/parse.c 2005-03-13 01:32:36.000000000 -0500
-+++ xc/extras/Xpm/lib/parse.c 2005-03-13 01:34:39.000000000 -0500
+diff -urN xc/extras/Xpm/lib~/parse.c xc/extras/Xpm/lib/parse.c
+--- xc/extras/Xpm/lib~/parse.c 2005-05-25 02:24:33.278307772 -0500
++++ xc/extras/Xpm/lib/parse.c 2005-05-25 01:58:18.000000000 -0500
@@ -1,3 +1,4 @@
+/* $XdotOrg: pre-CVS proposed fix for CESA-2004-003 alanc 7/25/2004 $ */
/*
@@ -1751,194 +1950,9 @@
/*
* This function parses an Xpm file or data and store the found informations
-diff -urN xc~/extras/Xpm/lib/s_popen.c xc/extras/Xpm/lib/s_popen.c
---- xc~/extras/Xpm/lib/s_popen.c 1969-12-31 19:00:00.000000000 -0500
-+++ xc/extras/Xpm/lib/s_popen.c 2005-03-13 01:34:39.000000000 -0500
-@@ -0,0 +1,181 @@
-+/*
-+ * Copyright (C) 2004 The X.Org fundation
-+ *
-+ * Permission is hereby granted, free of charge, to any person
-+ * obtaining a copy of this software and associated documentation
-+ * files (the "Software"), to deal in the Software without
-+ * restriction, including without limitation the rights to use, copy,
-+ * modify, merge, publish, distribute, sublicense, and/or sell copies
-+ * of the Software, and to permit persons to whom the Software is fur-
-+ * nished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be
-+ * included in all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-+ * NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR
-+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
-+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ * Except as contained in this notice, the name of the X.Org fundation
-+ * shall not be used in advertising or otherwise to promote the sale,
-+ * use or other dealings in this Software without prior written
-+ * authorization from the X.Org fundation.
-+ */
-+
-+/*
-+** This is a secure but NOT 100% compatible replacement for popen()
-+** Note: - don't use pclose() use fclose() for closing the returned
-+** filedesc.!!!
-+**
-+** Known Bugs: - unable to use i/o-redirection like > or <
-+** Author: - Thomas Biege <thomas@suse.de>
-+** Credits: - Andreas Pfaller <a.pfaller@pop.gun.de> for fixing a SEGV when
-+** calling strtok()
-+*/
-+
-+#include <sys/types.h>
-+#include <sys/wait.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <unistd.h>
-+#include <string.h>
-+
-+#define __SEC_POPEN_TOKEN " "
-+
-+FILE *s_popen(char *cmd, const char *type)
-+{
-+ pid_t pid;
-+ int pfd[2];
-+ int rpipe = 0, wpipe = 0, i;
-+ char **argv;
-+ char *ptr;
-+ char *cmdcpy;
-+
-+
-+ if(cmd == NULL || cmd == "")
-+ return(NULL);
-+
-+ if(type[0] != 'r' && type[0] != 'w')
-+ return(NULL);
-+
-+ if ((cmdcpy = strdup(cmd)) == NULL)
-+ return(NULL);
-+
-+ argv = NULL;
-+ if( (ptr = strtok(cmdcpy, __SEC_POPEN_TOKEN)) == NULL)
-+ {
-+ free(cmdcpy);
-+ return(NULL);
-+ }
-+
-+ for(i = 0;; i++)
-+ {
-+ if( ( argv = (char **) realloc(argv, (i+1) * sizeof(char *)) ) == NULL)
-+ {
-+ free(cmdcpy);
-+ return(NULL);
-+ }
-+
-+ if( (*(argv+i) = (char *) malloc((strlen(ptr)+1) * sizeof(char))) == NULL)
-+ {
-+ free(cmdcpy);
-+ return(NULL);
-+ }
-+
-+ strcpy(argv[i], ptr);
-+
-+ if( (ptr = strtok(NULL, __SEC_POPEN_TOKEN)) == NULL)
-+ {
-+ if( ( argv = (char **) realloc(argv, (i+2) * sizeof(char *))) == NULL)
-+ {
-+ free(cmdcpy);
-+ return(NULL);
-+ }
-+ argv[i+1] = NULL;
-+ break;
-+ }
-+ }
-+
-+
-+ if(type[0] == 'r')
-+ rpipe = 1;
-+ else
-+ wpipe = 1;
-+
-+ if (pipe(pfd) < 0)
-+ {
-+ free(cmdcpy);
-+ return(NULL);
-+ }
-+
-+ if((pid = fork()) < 0)
-+ {
-+ close(pfd[0]);
-+ close(pfd[1]);
-+ free(cmdcpy);
-+ return(NULL);
-+ }
-+
-+ if(pid == 0) /* child */
-+ {
-+ if((pid = fork()) < 0)
-+ {
-+ close(pfd[0]);
-+ close(pfd[1]);
-+ free(cmdcpy);
-+ return(NULL);
-+ }
-+ if(pid > 0)
-+ {
-+ exit(0); /* child nr. 1 exits */
-+ }
-+
-+ /* child nr. 2 */
-+ if(rpipe)
-+ {
-+ close(pfd[0]); /* close reading end, we don't need it */
-+ dup2(STDOUT_FILENO, STDERR_FILENO);
-+ if (pfd[1] != STDOUT_FILENO)
-+ dup2(pfd[1], STDOUT_FILENO); /* redirect stdout to writing end of pipe */
-+ }
-+ else
-+ {
-+ close(pfd[1]); /* close writing end, we don't need it */
-+ if (pfd[0] != STDIN_FILENO)
-+ dup2(pfd[0], STDIN_FILENO); /* redirect stdin to reading end of pipe */
-+ }
-+
-+ if(strchr(argv[0], '/') == NULL)
-+ execvp(argv[0], argv); /* search in $PATH */
-+ else
-+ execv(argv[0], argv);
-+
-+ close(pfd[0]);
-+ close(pfd[1]);
-+ free(cmdcpy);
-+ return(NULL); /* exec failed.. ooops! */
-+ }
-+ else /* parent */
-+ {
-+ waitpid(pid, NULL, 0); /* wait for child nr. 1 */
-+
-+ if(rpipe)
-+ {
-+ close(pfd[1]);
-+ free(cmdcpy);
-+ return(fdopen(pfd[0], "r"));
-+ }
-+ else
-+ {
-+ close(pfd[0]);
-+ free(cmdcpy);
-+ return(fdopen(pfd[1], "w"));
-+ }
-+
-+ }
-+}
-+
-diff -urN xc~/extras/Xpm/lib/scan.c xc/extras/Xpm/lib/scan.c
---- xc~/extras/Xpm/lib/scan.c 2005-03-13 01:32:36.000000000 -0500
-+++ xc/extras/Xpm/lib/scan.c 2005-03-13 01:39:04.000000000 -0500
+diff -urN xc/extras/Xpm/lib~/scan.c xc/extras/Xpm/lib/scan.c
+--- xc/extras/Xpm/lib~/scan.c 2005-05-25 02:24:33.286307793 -0500
++++ xc/extras/Xpm/lib/scan.c 2005-05-25 01:58:18.000000000 -0500
@@ -43,6 +43,8 @@
* Lorens Younes (d93-hyo@nada.kth.se) 4/96
*/
@@ -2120,9 +2134,8 @@
}
#undef CLEAN_UP
-diff -urN xc~/lib/Xpm/Imakefile xc/lib/Xpm/Imakefile
---- xc~/lib/Xpm/Imakefile 2005-03-13 01:32:36.000000000 -0500
-+++ xc/lib/Xpm/Imakefile 2005-03-13 01:34:39.000000000 -0500
+--- xc/lib/Xpm/Imakefile~ 2005-05-25 02:54:50.045583246 -0500
++++ xc/lib/Xpm/Imakefile 2005-05-25 02:55:18.377736639 -0500
@@ -42,11 +42,24 @@
SPRINTFDEF = -DVOID_SPRINTF
#endif
@@ -2155,7 +2168,7 @@
CrDatFrI.c CrIFrDat.c RdFToDat.c WrFFrDat.c \
- Attrib.c CrIFrP.c CrPFrI.c Image.c Info.c RdFToBuf.c WrFFrBuf.c
+ Attrib.c CrIFrP.c CrPFrI.c Image.c Info.c RdFToBuf.c WrFFrBuf.c \
-+ s_popen.c $(SNPRINTFSRCS)
++ $(SNPRINTFSRCS)
OBJS = data.o create.o misc.o rgb.o scan.o parse.o hashtab.o \
CrBufFrI.o CrDatFrP.o CrPFrBuf.o RdFToI.o WrFFrI.o \
@@ -2163,18 +2176,16 @@
CrDatFrI.o CrIFrDat.o RdFToDat.o WrFFrDat.o \
- Attrib.o CrIFrP.o CrPFrI.o Image.o Info.o RdFToBuf.o WrFFrBuf.o
+ Attrib.o CrIFrP.o CrPFrI.o Image.o Info.o RdFToBuf.o WrFFrBuf.o \
-+ s_popen.o $(SNPRINTFOBJS)
++ $(SNPRINTFOBJS)
XPMDIR = $(TOP)/extras/Xpm
XPMLIBDIR = $(TOP)/extras/Xpm/lib
-@@ -99,5 +114,10 @@
- LinkSourceFile(RdFToBuf.c,$(XPMLIBDIR))
+@@ -100,4 +115,8 @@
LinkSourceFile(WrFFrBuf.c,$(XPMLIBDIR))
LinkSourceFile(xpm.h,$(XPMLIBDIR))
-+LinkSourceFile(s_popen.c,$(XPMLIBDIR))
-+
+
+#if !HasSnprintf
+LinkSourceFile(snprintf.c,$(LIBSRC)/misc)
+#endif
-
++
DependTarget()
Modified: branches/4.3.0/sid/debian/po/es.po
===================================================================
--- branches/4.3.0/sid/debian/po/es.po 2005-05-29 17:46:37 UTC (rev 2273)
+++ branches/4.3.0/sid/debian/po/es.po 2005-06-01 05:00:12 UTC (rev 2274)
@@ -29,7 +29,7 @@
"Project-Id-Version: xfree86 4.2.1-6\n"
"Report-Msgid-Bugs-To: debian-x@lists.debian.org\n"
"POT-Creation-Date: 2004-09-22 01:37:39-0500\n"
-"PO-Revision-Date: 2005-03-08 12:05+0100\n"
+"PO-Revision-Date: 2005-05-17 18:59:19-0500\n"
"Last-Translator: Javier Fernandez-Sanguino Pe�jfs@debian.org>\n"
"Language-Team: ES <debian-l10n-spanish@lists.debian.org>\n"
"MIME-Version: 1.0\n"
@@ -62,8 +62,8 @@
"old or unofficial Debian packages, may continue to install files there."
msgstr ""
"Su sistema utiliza la antigua ubicaci� es posible que algunos programas "
-"como los provistos por paquetes Debian antiguos o no oficiales puede que "
-"sigan instalando ficheros all�
+"como los provistos por paquetes Debian antiguos o no oficiales sigan "
+"instalando ficheros all�
#. Type: boolean
#. Description
Reply to: