diff options
author | Matthieu Herrb <matthieu@cvs.openbsd.org> | 2023-10-17 13:07:34 +0000 |
---|---|---|
committer | Matthieu Herrb <matthieu@cvs.openbsd.org> | 2023-10-17 13:07:34 +0000 |
commit | da0d5492b55d2255955c80c4754359dcfcf60c48 (patch) | |
tree | 05526b53031a13182e53d7e8dc1a3f4c2c012cae /lib | |
parent | 56a170ffcc54f0a84bac00d9bea792161cbf0f07 (diff) |
Update libXpm to version 3.5.17. ok tb@
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libXpm/CHANGES | 957 | ||||
-rw-r--r-- | lib/libXpm/ChangeLog | 128 | ||||
-rw-r--r-- | lib/libXpm/Makefile.bsd-wrapper | 4 | ||||
-rw-r--r-- | lib/libXpm/configure.ac | 5 | ||||
-rw-r--r-- | lib/libXpm/include/X11/xpm.h | 8 | ||||
-rw-r--r-- | lib/libXpm/m4/libtool.m4 | 5 | ||||
-rw-r--r-- | lib/libXpm/src/RdFToBuf.c | 2 | ||||
-rw-r--r-- | lib/libXpm/src/RdFToI.c | 8 | ||||
-rw-r--r-- | lib/libXpm/src/WrFFrBuf.c | 2 | ||||
-rw-r--r-- | lib/libXpm/src/WrFFrI.c | 4 | ||||
-rw-r--r-- | lib/libXpm/src/XpmI.h | 77 | ||||
-rw-r--r-- | lib/libXpm/src/rgb.c | 2 | ||||
-rw-r--r-- | lib/libXpm/test/TestAllFiles.h | 6 | ||||
-rw-r--r-- | lib/libXpm/test/XpmRead.c | 6 | ||||
-rw-r--r-- | lib/libXpm/test/XpmWrite.c | 6 | ||||
-rw-r--r-- | lib/libXpm/test/rgb.c | 2 |
16 files changed, 209 insertions, 1013 deletions
diff --git a/lib/libXpm/CHANGES b/lib/libXpm/CHANGES deleted file mode 100644 index b90e6cdd7..000000000 --- a/lib/libXpm/CHANGES +++ /dev/null @@ -1,957 +0,0 @@ -/* - * Copyright (C) 1989-95 GROUPE BULL - * - * 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 - * furnished 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 - * GROUPE BULL 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 GROUPE BULL shall not be - * used in advertising or otherwise to promote the sale, use or other dealings - * in this Software without prior written authorization from GROUPE BULL. - */ - -/**************************************************************************\ -* * -* HISTORY of user-visible changes * -* * -\**************************************************************************/ - -3.4k (98/03/18) - - ENHANCEMENTS: - - A new program called cxpm is provided to check on XPM files and help - figuring out where the file might be invalid. - - The FAQ and README are now in HTML. - - BUGS CORRECTED: - - A bug in writing pixmaps out on an 32 bit depth visual and MSBFirst - machine. - - patch from Uwe Langenkamp <Uwe.Langenkamp@t-online.de> - - A severe bug in parsing the pixels section when an unknown character - is encountered. - -3.4j (96/12/31) - - ENHANCEMENTS: - - The XPM library can now be built under Amiga DOS. This entirely comes - from: Lorens Younes <d93-hyo@nada.kth.se> - See the README.AMIGA file for details. - - Changes for MSW: big performance improvement in ParseAndPutPixels(), - fixed creation of the mask in SetColor() - - patch from Jan Wielemaker <jan@swi.psy.uva.nl> - - makefiles are provided for VMS - - given by Martin P.J. Zinser m.zinser@gsi.de - - Imakefiles reworked to get smoother builds and fixes from: - - Paul DuBois dubois@primate.wisc.edu - - Larry Schwimmer schwim@cyclone.stanford.edu - - thanks to some code rearrangement the library is smaller (the size - reduction goes from 4 to 7% depending on the system) - - BUGS CORRECTED: - - A severe bug (introduced in 3.4i as part of the sprintf - optimization) in code writing XPM extensions to a buffer - XpmCreateBufferFromImage/Pixmap. - - The XpmAttributes definition in xpm.h was declaring nalloc_colors to - be Bool, it's an int. - -3.4i (96/09/13) - - NEW FEATURES: - - The XPM library now allows the application to pass its own color - allocation/free functions. For this matter the following was done: - The XpmAttributes structure has three new fields alloc_color, - free_color, and color_closure. The following new valuemasks were - added XpmAllocColorFunc, XpmFreeColorsFunc, XpmColorClosure. And - two new types were defined XpmAllocColorFunc and XpmFreeColorsFunc. - See documentation for details. - - ENHANCEMENTS: - - Windows NT support. It should compile and run fine based on the X - Consortium X11R6 distribution. - - The README file contains information to compile on Solaris with gcc. - - Part of the code has been optimized by using the value returned by - sprintf instead of calling strlen. Add the flag -DVOID_SPRINTF - if on your system sprintf returns void. - - patch from Thomas Ott thommy@rz.fh-augsburg.de - - BUGS CORRECTED: - - XpmFree is now a real function (simply calling free by default). - - CHANGES TO THE DOC: - - The documentation describes the new XpmAttributes fields and their - use. - -3.4h (96/02/01) - - NEW FEATURES: - - The XpmAttributes has a new member called 'alloc_close_colors' which - lets the caller specify whether close colors should be allocated - using XAllocColor or not. This is especially useful when one uses a - private colormap full of read/write cells. - The xpm.h header file define a new bitmap flag called - XpmAllocCloseColors to use along with this new slot. - - Dale Pease peased@bigbird.cso.gtegsc.com - - The XpmAttributes has a new member called 'bitmap_format' which lets - the caller specify the format of 1 bit depth images (XYBitmap or - ZPixmap). The xpm.h header file define a new bitmap flag called - XpmBitmapFormat to use along with this new field. - - ENHANCEMENTS: - - XpmReadFileTo[Image/Pixmap], XpmCreate[Image/Pixmap]FromData, - XpmCreateImageFromDataFromBuffer functions do no longer use a - temporary XpmImage object, which reduces a lot the amount of memory - used. On the other hand it can take a little more time, but given the - following figures (based on sxpm) it is a real good trade-off. - - Reading a 22x22 pixmap with 5 colors no time change is detected - using time: - real 0.3 - user 0.1 - sys 0.1 - - Reading a 1279x1023 pixmap with 14 colors (quite extreme case for - XPM!) the time goes from: - real 1.9 - user 0.8 - sys 0.8 - - to: - real 2.2 - user 1.8 - sys 0.3 - - Reading the 22x22 pixmap with 5 colors the memory usage (under - purify) goes from: - 255256 code - 55496 data/bss - 163848 heap (peak use) - 4248 stack - to: - 271240 code - 55472 data/bss - 159752 heap (peak use) - 4224 stack - - And reading the 1279x1023 pixmap with 14 colors it goes from: - 255256 code - 55496 data/bss - 6705160 heap (peak use) - 4280 stack - to: - 271240 code - 55472 data/bss - 1732616 heap (peak use) - 4264 stack - - This clearly shows that while for small pixmaps there is no real - difference on both sides, for large pixmaps this makes a huge - difference about the amount of memory used and it is not much - slower. - - Note that you can still get the old behavior using both - XpmReadFileToXpmImage and XpmCreate[Image/Pixmap]FromXpmImage instead - of XpmReadFileTo[Image/Pixmap]. Once more XPM gives you the choice! - - BUGS CORRECTED: - - when defined locally the global symbols strcasecmp and strdup are - now called xpmstrcasecmp and xpmstrdup to avoid any possible - conflict. - - VMS has a bogus file system which requires a work around in - XpmReadFileToBuffer. - - patch from Bob.Deen@jpl.nasa.gov - - the type of the exactColors attribute has been changed from unsigned - int to Bool. - - CHANGES TO THE DOC: - - the documentation describes the new XpmAttributes fields - alloc_close_colors and bitmap_format. - -3.4g (95/10/08) - - ENHANCEMENTS: - - The XpmAttributes structure has now two new slots: alloc_pixels and - nalloc_pixels in order to provide an easy way to free allocated - colors. The new bitmask XpmReturnAllocPixels should be used to - request this data through the valuemask. Unless you really know why, - you should use this instead of XpmReturnPixels, pixels, and npixels. - - the XPM1 format parsing has been improved. - - patch from Chuck Thompson <cthomp@cs.uiuc.edu> - - compilers defining _STDC_ to something different from 1 are now - considered as ANSI compilers. - - the README file provides now more info on how to build XPM depending - on the system. - - BUGS CORRECTED: - - a bug introduced in 3.4f in the XPM1 format parsing function. - - fix from Chuck Thompson <cthomp@cs.uiuc.edu> - - the hashtable was not free when the color parsing failed. - - patch from ackley@cs.unm.edu (David Ackley) - - the close color mechanism wasn't used if one of the closeness - parameter was null. Now only one needs to be different from 0. - Lorens Younes d93-hyo@nada.kth.se - - parsing of long comments failed with a segmentation fault. - - CHANGES TO THE DOC: - - the documentation describes the new XpmAttributes fields - alloc_pixels and nalloc_pixels and how they are used. - -3.4f (95/05/29) - - ENHANCEMENTS: - - Defines IMAKE_DEFINES in the top Imakefile so one can easily avoid - building the shared library. - - Add some information about the installation process in the README. - - filenames are surrounded with quotes when calling gzip or compress in - order to allow spaces within filenames. - - William Parn <parn@fgm.com> - - the compilation and the shared library building should be smoother - on Alpha OSF/1. - - patch from Dale Moore <Dale.Moore@CS.cmu.edu> - - BUGS CORRECTED: - - a segmentation fault occurring in some weird case. - -3.4e (95/03/01) - - ENHANCEMENTS: - - The top Imakefile passes CDEBUGFLAGS and DEFINES to subdirs. Thus - only this Imakefile should need to be edited by users. - - FAQ includes the answer to the question "How can I get a non - rectangular icon using XPM ?" - - VMS support updated - - patch from Martin P.J. Zinser m.zinser@gsi.de - - BUGS CORRECTED: - - XpmCreateImageFromXpmImage() called from XpmReadFileToPixmap() could - lead to a segmentation fault since free was called on a memory block - size variable instead of the block itself. Note: this bug has been - introduced in 3.4d. - -3.4d (95/01/31) - - ENHANCEMENTS: - - sxpm now supports a -version option command. - - BUGS CORRECTED: - - the list of pixels returned in XpmAttributes was wrong when two - colors were defined as None in the read XPM - - Lionel.Mallet@sophia.inria.fr - - the parser was skipping whitespace reading extensions strings. This - has been fixed so extensions lines are now returned exactly as they - are. - - some compilation control added for the dec alpha with X11R5 (LONG64) - - patch from Fredrik Lundh <Fredrik_Lundh@ivab.se> - - when writing an XPM file, '-' characters are replaced with '_' - characters in the array name, in order to get a valid C syntax name. - - XYPixmap format images were not correctly handled. - - XPM1 file with names using multiple '_' characters are now handled - correctly. - - todd@erda.rl.af.mil (Todd Gleason) - -3.4c (94/06/06) - - Yes, this is kind of quick. But this is because no code has been modified, - this is just a new packaging to make the whole stuff more suitable to the - X development team's requests for inclusion in the R6 contrib. - - ENHANCEMENTS: - - Several filenames were too long to fit without any conflict on DOS - and CD-ROM filesystems. They have been renamed. - - Imakefiles use XCOMM for comments instead of the # character. - - the Postscript documentation file doc/xpm.ps is now distributed as - doc/xpm.PS.gz and allows browsing with tools such as ghostview. - - Besides, parts of lib/misc.c have been moved to several new files, - and some functions of data.c have been moved to other files in - order to get a better link profile. - - I've also added a FAQ hoping this will prevent people from - continuously filling my mailbox with the same questions. - - sxpm.c includes <X11/xpm.h> instead of "xpm.h" and BUILDINCTOP is - used in Makefiles as expected. - - Everything can be done simply using "xmkmf -a" and "make". - -3.4b (94/05/24) - - ENHANCEMENTS: - - XPM can now be built under MS Windows. Yes, this is possible and this - entirely comes from: - - Hermann Dunkel <hedu@cul-ipn.uni-kiel.de> - See the README.MSW file for details. - - - building the shared library now depends on the SharedLibXpm variable - and no longer on the SharedLibX variable which is private to the X - Window System project. - - patch from Stephen Gildea <gildea@x.org> - Other variables can now be set for the various locations needed. - - - lib/parse.c does no longer use a 256x256 array in the stack but - malloc it instead. - - - The Copyright notice which has been re-written from the X11R6's one - should be clearer and is now present in every file. - - BUGS CORRECTED: - - lib/xpmP.h does no longer define a Boolean type which conflicts with - the Intrinsic definition. Instead the type Bool defined in Xlib is - used. - - neumann@watson.ibm.com (Gustaf Neumann) - -3.4a (94/03/29) - - BUGS CORRECTED: - - passing NULL as shapemask_return to XpmReadFileToPixmap and similar - functions was leading to a bus error. - - Dean Luick <dean@falcon.natinst.com> - -3.4 (94/03/14) - - IMPORTANT NOTE: - This version is not compatible with 3.3. Fortunately most people should - only need to recompile. - I apology for this but CDE/Motif have put heavy pressure to go that - way. The point is that I designed and released Xpm 3.3 in order to let - OSF include a clean version of Xpm in Motif 2.0. This new version was - not fully compatible with 3.2 but I thought it didn't matter since this - was going to be the first version used within Motif. Unfortunately CDE - was already using xpm-3.2 internally and requires both source and - binary backward compatibility. By the way I must say they didn't drop - us a single line to let us know they were using it and thus were - expecting stability. All this could have been avoided... - - However, since I had to go for a not compatible version I took this as - an opportunity to modify the lower level API, which was new in 3.3 and - which was somewhat clumsy, in order to provide yet a better API. - - The library has been modified to have both source and binary backward - compatibility with xpm-3.2. This implies it is not either source or - binary compatible with 3.3. The fields related to the 3.2 XpmInfos - mechanism have been put back into the XpmAttributes structure. The new - 3.3 XpmInfos struct has been renamed as XpmInfo to avoid conflict with - the old 3.2 flag which is back too. All the semantic related to the - XpmAttributes infos fields is back as well. - - So this new version provides a high level API which is fully - compatible with 3.2 and still provides the 3.3 lower level API - (XpmImage) with the XpmInfos struct renamed as XpmInfo. This leads to - some redundancy but this was the best I could do to satisfy both - CDE/Motif people who needed the backward compatibility and myself (who - always tries to provide you with the best ;-). - - Tests have been successfully performed with pixmap-2.1, pixmap-2.4, and - sxpm. - - ENHANCEMENTS: - - The colorTable member of the XpmAttributes structure is now an - (XpmColor*) in order to be compatible with an XpmImage colorTable. - However in order to be backward compatible this field is cast to - (XpmColor **), which is equivalent to (char ***), when it is used - with the old flags XpmInfos and XpmReturnInfos. To handle the new - type the new flags XpmColorTable and XpmReturnColorTable have been - defined. - - The XpmInfo struct has been extended to avoid having to deal with an - XpmAttributes at the lower level. The idea is that all the data - stored in an Xpm file can be retrieve through both an XpmImage and - an XpmInfo struct. See the documentation for details. - - XpmUndefPixel is defined and exported by xpm.h in order to let - clients providing their own colorTable when writing out an Xpm file. - See the documentation for details. - - in sxpm/sxpm.c, set attribute XtNinput to True on toplevel widget. - Windows that don't "take" input, never get focus, as mandated by - the ICCM. - patch from Henrique Martins <martins@hplhasm.hpl.hp.com> - - lib/Imakefile modified to build the shared library under IRIX 5. - patch from simon@lia.di.epfl.ch (Simon Leinen) - - NEW FEATURES: - - a new function and a new define should help client figuring out with - which Xpm library version they are working. These are - XpmIncludeVersion and XpmLibraryVersion(). - -3.3 (93/12/20) - - NEW FEATURES: - - XPM1 files are now supported. - - a new function is provided to get an error string related to the - returned error code. - - suggested by Detlef Schmier <detlef@mfr.dec.com> - - ENHANCEMENTS: - - gzip and gunzip are called with the -q option (quiet) - - patch from Chris P. Ross <cross@eng.umd.edu> - - the parser is again more flexible about the way the strings are - distributed on lines. Actually a single line XPM file can be read. - - the documentation should be clearer about shapemask generation and - XpmAttributes valuemask. - - BUGS CORRECTED: - - reading some binary file was leading to a bus error. - - patch from Detlef Schmier <detlef@mfr.dec.com> - - the ? character is no longer used when writing an XPM file in order - to avoid possible ANSI trigraphs. - -3.3alpha (93/08/13) - - NEW FEATURES: - - a new level interface is provided to allow applications to do either - icon editing or data caching. - The XpmAttributes has been changed but most applications will just - need to be recompiled. - - new structures are provided to deal with the new lower level: - XpmImage, XpmColor, XpmInfos. - - - a separate distribution called xpm-contrib is available. This - includes the converters which used to be part of this distribution - plus: - two new applications: - * nexpm to draw a pixmap in *any* existing window from - Ralph Betza <gnohmon@ssiny.com> - * xpmview to display a list of Xpm files from - Jean Michel Leon <leon@sophia.inria.fr> - - a hacky string to pixmap converter, provided by - Robert H. Forsman Jr. <thoth@manatee.cis.ufl.edu> - - The Xpm editor called pixmap will also be part of this contrib. - This does not mean it is the best pixmap editor one can find - but it is the only one that I know of which tries to handle - all the features of this format. - - ENHANCEMENTS: - - the code to build XImage data has been optimized by - jules@x.co.uk (Julian Gosnell) - the old code is still available when compiling with the - -DWITHOUT_SPEEDUPS flag. - - - closecolor code was not re-entrant - - dbl@visual.com (David B. Lewis) - - fix gzip filename (*.gz and no longer *.z). - - Jason Patterson <jasonp@fitmail.fit.qut.edu.au> - - sxpm has 2 new options: - -nom to do not display the mask if there is one - -cp <color> <pixel> to override a color value with a given - pixel, i.e. sxpm plaid.xpm -cp red 4 - - also the '-s' adn '-p' options have been renamed to '-sc' and '-sp'. - - - xpm.h defines XpmFormat, XpmVersion, and XpmRevision numbers. - - BUGS CORRECTED: - - closecolor minor fix - - Jason Patterson <jasonp@fitmail.fit.qut.edu.au> - -3.2g (93/04/26) - - ENHANCEMENTS: - - much faster close colors - - piping from/to compressed files now handles GNU's gzip (.z) format - - added XpmColorKey attribute - ability to specify which visual's - colors to use (ie: now it's possible to read in a pixmap in a - color visual, but use the colors specified for monochrome). - - added -mono, -grey4, -grey and -color options to sxpm to demonstrate - the XpmColorKey attribute. - - Jason Patterson <jasonp@fitmail.qut.edu.au> - - BUGS CORRECTED: - - fixed bug where redefining "None" as a pixel stopped mask generation - - minor SVR4 defines for <string.h> - - fixed annoying closecolor bug related to read/write color cells - - fixed minor bug in color value -> pixel overloading - - manual updated to include new red/green/blue closeness attributes - - Jason Patterson <jasonp@fitmail.qut.edu.au> - - - the top Imakefile was missing the depend target - - sxpm/Imakefile fixed so that -L../lib is set before the standard - library location. - - Vivek Khera <khera@cs.duke.edu> - - - lib/xpmP.h now defines bcopy as memcpy for VMS (required by recent - versions of VMS) - - J. Daniel Smith <dsmith@ann-arbor.applicon.slb.com> - - - the lib/Imakefile didn't work with X11R4. - - -3.2f (93/03/17) - - NEW FEATURES: - - the library provides four new functions to deal with Xpm files - loaded in memory as single character strings buffers: - - XpmCreateImageFromBuffer - XpmCreatePixmapFromBuffer - XpmCreateBufferFromImage - XpmCreateBufferFromPixmap - - - in addition, as a convenience, two functions are provided to copy a - file in a buffer and to write a file from a buffer: - - XpmReadFileToBuffer - XpmWriteFileFromBuffer - - ENHANCEMENTS: - - Files are now dispatched in the following sub-directories: - lib, sxpm, and doc. - - Imakefiles will let you build a shared library as well as the static - one (with either X11R4 or X11R5). - - The documentation has been ported from LaTeX to FrameMaker and is - now included in the distribution in its PostScript form (doc/xpm.ps). - Source files are available on request. - Also the documentation has been reorganized and includes a table of - contents and an index of the functions (the number of functions - increasing this became a requisite). - - BUGS CORRECTED: - - Many warnings have been fixed - patch from Daniel Dardailler - daniel@osf.org - -3.2e (93/02/05) - - ENHANCEMENTS: - - use XpmMalloc, XpmRealloc, XpmCalloc, and XpmFree which are defines - in xpmP.h. This should help people wanting to use their own functions. - - BUGS CORRECTED: - - Intrinsic.h is no longer included. - - bzero is defined as memset on SYSV and SVR4. - - some memory initialization bug concerning XpmAttributes. - -3.2d (93/01/27) - - ENHANCEMENTS: - - compile on Solaris 2.0 - - patch from Clint Jeffery <cjeffery@cs.arizona.edu> - - BUGS CORRECTED: - - shape masks are now set correctly for LSBFirst (Decs). - - pixmaps are now set correctly for 2 bit displays (Nexts). - - patch from Josef Leherbauer <joe@takeFive.co.at> - - isspace was called on getc which fails when EOF is returned. - - Marelli Paolo <marelli@colos3.usr.dsi.unimi.it> - -3.2c (92/12/29) - - ENHANCEMENTS: - - parsing optimized for single and double characters color - - patch originally from Martin Brunecky - marbru@build1.auto-trol.com - - BUGS CORRECTED: - - XpmFreeExtensions was calling free on some argument without checking - it was not NULL. - - strdup was not correctly defined for systems which do not provide - it. - Hans-Peter Lichtin <lich@zellweger.ch> - - some bug in XpmCrDataFI.c - - Sven Delmas garfield@avalanche.cs.tu-berlin.de - - NOTE: - - there is still a bug with the creation of the clipmask on display of - depth 2 but I can't find a fix because unfortunately I don't have such - a rendering system and nobody gets the time to investigate for me. - -3.2b (92/10/19) - - ENHANCEMENTS: - - Create XpmReadFileToData and XpmWriteFileFromData - - Dan Greening <dgreen@sti.com> - - added "close colors" support and ability to redefine color values - as pixels at load time, as well as color names - - Jason Patterson <jasonp@fitmail.qut.edu.au> - - errors while parsing or allocating colors now revert to other - visual defaults, creating pixmap/image as expected, and returning - XpmSuccess. The old behavior of XpmColorError being returned and no - pixmap/image being created can be retained by setting the - exactColors attribute. - - Jason Patterson <jasonp@fitmail.qut.edu.au> - - BUGS CORRECTED: - - SVR4 defines for including <string.h> instead of <strings.h> - - Jason Patterson <jasonp@fitmail.qut.edu.au> - - attributes->extensions and attributes->nextensions fields were not - set correctly when no extensions present in file. - - Simon_Scott Cornish <cornish@ecr.mu.oz.au> - -3.2a (92/08/17) - - ENHANCEMENTS: - - use the mock lisp hashing function instead of the gnu emacs one, - it is faster in some cases and never slower (I've not found any case). - - BUGS CORRECTED: - - function prototypes for ansi compilers. - - some memory initialization bugs (purify is just great for this). - - empty strings in extensions are now correctly handled. - -3.2 (92/07/06) - - NEW FEATURES: - - both format and functions handle extensions data. This allow people - to store additional data related to a pixmap. See documentation for - detail. - - sxpm supports the new option '-c' to use a private colormap. This is - useful when displaying pixmaps using a lot of colors. - - sxpm supports the new option '-v' (verbose) to get possible - extensions print out on standard error. - - ENHANCEMENTS: - - most of the code has been reworked to be improved and thus almost - every function is faster. It takes less than 6 seconds of real time on - a sun4 to display, with sxpm, a 487x635 pixmap using 213 colors, while - it takes 32 seconds with the old library! It takes 18 seconds to - display a 1279x1023 screen dump using 14 colors while xwud takes 10 - seconds. - Of course performance improvements are not always that great, they - depend on the size and number of colors but I'm sure everybody will - appreciate ;-) - I know how to improve it more but this will require changes in the - architecture so this is not for now. Some optimizations have been - contributed by gregor@kafka.saic.com (gregg hanna) and - jnc@csl.biosci.arizona.edu (John N. Calley). - - the Imakefile is modified to let you install sxpm - Rainer Klute - <klute@irb.informatik.uni-dortmund.de> - - xpmP.h declares popen for Sequent platforms - Clinton Jeffery - <cjeffery@cs.arizona.edu> - - XpmWriteFileFromImage/Pixmap rather than truncating the pixmap name - to the first dot changes dots to underscores to get a valid C syntax - name. - - - BUGS CORRECTED: - - there was a bug in the image creation function for some 24 bits - displays. It is fixed. - - allocated color pixels are now freed when an error occurs - - nusser@dec1.wu-wien.ac.at (Stefan Nusser) - - CHANGES TO THE DOC: - - the documentation describes the new XpmExtension structure and how - to use it with read and write functions. - -3.1 (92/02/03) - - ENHANCEMENTS: - - sxpm now have more standard options (mainly suggested by - Rainer Sinkwitz <sinkwitz@ifi.unizh.ch>): - - Usage: sxpm [options...] - Where options are: - - [-d host:display] Display to connect to. - [-g geom] Geometry of window. - [-hints] Set ResizeInc for window. - [-icon filename] Set pixmap for iconWindow. - [-s symbol_name color_name] Overwrite color defaults. - [-p symbol_name pixel_value] Overwrite color defaults. - [-plaid] Read the included plaid pixmap. - [filename] Read from file 'filename', and from - standard input if 'filename' is '-'. - [-o filename] Write to file 'filename', and to standard - output if 'filename' is '-'. - [-nod] Don't display in window. - [-rgb filename] Search color names in the rgb text file - 'filename'. - - if no input is specified sxpm reads from standard input. - - - - Xpm functions and Ppm converters now deal with multiword colornames. - patches from Rainer Sinkwitz <sinkwitz@ifi.unizh.ch>. - - -3.0 (91/10/03) - - Functions name and defines have been modified again (sorry for that) - as follows: - - XpmReadPixmapFile XpmReadFileToPixmap - XpmWritePixmapFile XpmWriteFileFromPixmap - - XpmPixmapColorError XpmColorError - XpmPixmapSuccess XpmSuccess - XpmPixmapOpenFailed XpmOpenFailed - XpmPixmapFileInvalid XpmFileInvalid - XpmPixmapNoMemory XpmNoMemory - XpmPixmapColorFailed XpmColorFailed - - To update code using Xpm you can use the included shell script called - rename with the sed commands files name-3.0b-3.0c and name-3.0c-3.0. - Old names still valid though. - - NEW FEATURES: - - four new functions to work with images instead of pixmaps: - - XpmReadFileToImage - XpmWriteFileFromImage - XpmCreateImageFromData - XpmCreateDataFromImage - - ENHANCEMENTS: - Algorithms to create and scan images and pixmaps are based on the - MIT's R5 code, thus they are much cleaner than old ones and should - avoid any problem with any visual (yes, I trust MIT folks :-) - - BUGS CORRECTED: - Imakefile use INCDIR instead of ROOTDIR. - - CHANGES TO THE DOC: - - the documentation presents the four new functions. - -3.0c (91/09/18) - - In answer to request of people functions, types and defines names have - been changed as follows: - - XCreatePixmapFromData XpmCreatePixmapFromData - XCreateDataFromPixmap XpmCreateDataFromPixmap - XReadPixmapFile XpmReadPixmapFile - XWritePixmapFile XpmWritePixmapFile - XFreeXpmAttributes XpmFreeAttributes - - PixmapColorError XpmPixmapColorError - PixmapSuccess XpmPixmapSuccess - PixmapOpenFailed XpmPixmapOpenFailed - PixmapFileInvalid XpmPixmapFileInvalid - PixmapNoMemory XpmPixmapNoMemory - PixmapColorFailed XpmPixmapColorFailed - - ColorSymbol XpmColorSymbol - - Generally speaking every public name begins with 'Xpm' and every - private one with 'xpm'. This should avoid any possible conflict. - - Some files have also be renamed accordingly. - - NEW FEATURES: - - support for VMS and two new options for sxpm: icon and hints (see - manual for details) Richard Hess <rhess%pleione%cimshop@uunet.UU.NET> - - DEFINES in Imakefile and Makefile.noXtree allows you to set the - following: - - ZPIPE for un/compressing piped feature (default is on) - NEED_STRCASECMP for system which doesn't provide one (default - is off) - - - xpmtoppm.c has is own strstr function which is used if NEED_STRSTR - is defined when compiling - Hugues.Leroy@irisa.fr (Hugues Leroy). - - BUGS CORRECTED: - - many bugs have been fixed, especially for ansi compilers - - Doyle C. Davidson (doyle@doyled.b23b.ingr.com) and - Clifford D. Morrison (cdm%bigdaddy%edsr@uunet.UU.NET) - - parser is again a little more improved - -3.0b (91/09/12) - - This is a complete new version with a new API and where files and - structures have been renamed. So this should be taken as a new - starting release. - This release should be quickly followed by the 3.0 because I'm planning - to send it for X11R5 contrib which ends October 5th. - - NEW FEATURES: - - support for transparent color. - - support for hotspot. - - a new function: XCreateDataFromPixmap to create an XPM data from a - pixmap in order to be able to create a new pixmap from this data using - the XCreatePixmapFromData function later on. - - a new structure: XpmAttributes which replace the XpmInfo structure - and which leads to a much simpler API with less arguments. - - arguments such as visual, colormap and depth are optional, default - values are taken if omitted. - - parsing and allocating color failures don't simply break anymore. If - another default color can be found it is used and a PixmapColorError - is returned. In case no color can be found then it breaks and returns - PixmapColorFailed. - - for this reason the ErrorStatus codes are redefined as follows: - - null if full success - positive if partial success - negative if failure - - with: - #define PixmapColorError 1 - #define PixmapSuccess 0 - #define PixmapOpenFailed -1 - #define PixmapFileInvalid -2 - #define PixmapNoMemory -3 - #define PixmapColorFailed -4 - - - sxpm prints out a warning when a requested color could not be parsed - or alloc'ed, and an error when none has been found. - - sxpm handles pixmap with transparent color. For this purpose the - plaid_mask.xpm is added to the distribution. - - BUGS CORRECTED: - - I've again improved the memory management. - - the parser is also improved. - - when writing a pixmap to a file the variable name could be - "plaid.xpm" which is not valid in C. Now the extension name is cut off - to give "plaid" as variable name. - - reading multiple words colornames such as "peach puff" where leading - to non readable Xpm files. They are now skipped to have only single - word colorname. Lionel Mallet (mallet@ipvpel.unipv.it). - - parser was triggered by the "/" character inside string. - Doyle C. Davidson (doyle@doyled.b23b.ingr.com). This is corrected. - - sxpm maps the window only if the option "-nod" is not selected. - - CHANGES TO THE DOC: - - the documentation presents the new API and features. - -3.0a (91/04/10) - - This is an alpha version because it supports the new version of XPM, - but the library interface is still the same. Indeed it will change in - future release to get rid of obsolete stuff such as the type argument - of the XWritePixmapFile function. - - ******************************* WARNING ********************************* - The format is not anymore XPM2, it is XPM version 3 which is XPM2 - limited to the C syntax with the key word "XPM" in place of "XPM2 C". - The interface library has not changed yet but the type argument of - XWritePixmapFile and the type member of XpmInfo are not used anymore. - Meanwhile the library which is now called libXpm.a is backward - compatible as XPM2 files can be read. But the XWritePixmapFile - function only writes out XPM version 3 files. - ************************************************************************* - - NEW FEATURES: - - the library doesn't use global variables anymore, thus it should be - able to share it. - - sxpm has been rewritten on top of Xt, it can be used to convert - files from XPM2 to XPM version 3. - - xpm1to2c.perl has been upgraded to the new XPM version and renamed - as xpm1to3.perl - - ppmtoxpm2.c and ppmtoxpm2.1 have been upgraded too and renamed - ppmtoxpm.c and ppmtoxpm.1. In addition the xpmtoppm.c and xpmtoppm.1 - of the pbmplus package have been upgraded too. xpmtoppm can thus - convert XPM version 1 and 3 to a portable pixmap. These files should - replace the original ones which are part of the pbmplus package. See - the ppm.README file for more details. - - the library contains RCS variables which allows you to get revision - numbers with ident (which is part of the RCS package). The Id number - is an internal rcs number for my eyes only. The official one is found - in Version. - - BUGS CORRECTED: - - the memory management has been much improved in order to avoid - memory leaks. - - the XImage building algorithm has been changed to support correctly - different visual depths. There is special code to handle depths 1, 4, - 6, 8, 24, and 32 to build the image and send it in one whack, and - other depths are supported by building the image with XPutPixel which - is slow but sure. - - similar algorithms are used to read pixmaps and write them out. - - CHANGES TO THE DOC: - - the documentation presents the new XPM format. - - -2.8 (90/12/19) - - ******************************* WARNING ********************************* - Since the last release two structures have been modified and have now - bigger sizes, so ANY CODE USING THE libXPM2 NEEDS TO BE RECOMPILED. - ************************************************************************* - - NEW FEATURES: - - the ColorSymbol struct contains the new member 'pixel' which allow - to override default colors by giving a pixel value (in such a case - symbol value must be set to NULL), - - the XpmInfo struct contains the new member 'rgb_fname' in which one - can specify an rgb text file name while writing a pixmap with the - XWritePixmapFile function (otherwise this member should be set to - NULL). This way colorname will be searched and written out if found - instead of the RGB value, - - Imakefile originally provided by stolcke@ICSI.Berkeley.EDU, - - the old Makefile is now distributed as Makefile.noXtree and presents - install targets, - - the demo application is renamed sxpm (Show XPM), creates a window of - the size of the pixmap if no geometry is specified, prints out - messages instead of status when an error occurs, handles the new - option -p for overriding colors by giving a pixel value (not really - useful but is just here to show this new feature), handles the new - option -rgb for specifying an rgb text file, and ends on - keypress as buttonpress, - - defines for SYSV have been provided by Paul Breslaw - <paul@mecazh.uucp>, - - the distribution includes a new directory called converters which - contains xpm1to2 and xpm1to2c perl converters and a ppmtoxpm2 - converter provided by Paul Breslaw who upgraded the original ppmtoxpm - written by Mark W. Snitily <mark@zok.uucp>. - - CHANGES TO THE DOC: - - this file is created and will give old users a quick reference to - changes made from one release to the next one, - - documentation is changed to present the new ColorSymbol structure - and the way to override colors by giving a pixel value, and to present - the new XpmInfo structure and how to use it, - - a man page for sxpm is added to the distrib, - - the README file talks about sxpm and no more demo, and have - reference to the different converters. - -2.7 (90/11/12) - - NEW FEATURES: - - XReadPixmapFile reads from stdin if filename is NULL, - - XWritePixmapFile writes to stdin if filename is NULL, - - the demo application handles the new option -nod for no displaying - the pixmap in a window (useful when used as converter). - - CHANGES TO THE DOC: - - documentation about the new feature. - -2.6 (90/10/29) - - NEW FEATURES: - - from nazgul@alphalpha.com (Kee Hinckley): changes to make the - library usable as C++ code, and on Apollo without any warning. - - BUGS CORRECTED: - - from nazgul@alphalpha.com (Kee Hinckley): the xpm include files was - declaring XWritePixmapFile as taking in arg a Pixmap pointer instead - of a Pixmap. - -2.5 (90/10/17) - - BUGS CORRECTED: - - XWritePixmapFile was not closing the file while ending normally. - -2.4 (90/09/06) - - NEW FEATURES: - - XReadPixmapFile reads from a piped uncompress if the given filename - ends by .Z or if filename.Z exists, - - XWritePixmapFile writes to a piped compress if the given filename - ends by .Z. - - BUGS CORRECTED: - - demo now deals with window manager. - - CHANGES TO THE DOC: - - documentation about compressed files management. - -2.3 (90/08/30) - - BUGS CORRECTED: - - handle monochrome display correctly, - - comments can be empty. - -2.2 (90/08/27) - - BUGS CORRECTED: - - when reading some invalid free was dumping core on some machine. - -2.1 (90/08/24) - - First distribution of XPM2. - diff --git a/lib/libXpm/ChangeLog b/lib/libXpm/ChangeLog index 46076254e..047b81dd0 100644 --- a/lib/libXpm/ChangeLog +++ b/lib/libXpm/ChangeLog @@ -1,3 +1,128 @@ +commit a154f12b6e56f131bd5880fc96f11615ff940b29 +Author: Alan Coopersmith <alan.coopersmith@oracle.com> +Date: Tue Oct 3 08:43:57 2023 -0700 + + libXpm 3.5.17 + + Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> + +commit 91f887b41bf75648df725a4ed3be036da02e911e +Author: Yair Mizrahi <yairm@jfrog.com> +Date: Thu Sep 7 16:59:07 2023 -0700 + + Avoid CVE-2023-43787 (integer overflow in XCreateImage) + + This doesn't fix the CVE - that has to happen in libX11, this + just tries to avoid triggering it from libXpm, and saves time + in not pretending we can successfully create an X Image for + which the width * depth would overflow the signed int used to + store the bytes_per_line value. + + Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> + +commit 00348988396c88150f6ddfea3d3195cbf01d60c2 +Author: Alan Coopersmith <alan.coopersmith@oracle.com> +Date: Thu Sep 7 16:55:25 2023 -0700 + + test: Add test case for CVE-2023-43787 (integer overflow in XCreateImage) + + Provided by Yair Mizrahi of the JFrog Vulnerability Research team + + Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> + +commit 84fb14574c039f19ad7face87eb9acc31a50701c +Author: Alan Coopersmith <alan.coopersmith@oracle.com> +Date: Wed Sep 6 17:34:33 2023 -0700 + + Avoid CVE-2023-43786: stack exhaustion in XPutImage() + + This doesn't fix the CVE - that has to happen in libX11, this + just tries to avoid triggering it from libXpm, and saves time + in not pretending we can successfully create an X11 pixmap with + dimensions larger than the unsigned 16-bit integers used in the + X11 protocol for the dimensions. + + Reported by Yair Mizrahi of the JFrog Vulnerability Research team + + Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> + +commit edb97396620f019f8d2e707ad3fbaf6bbbd5ed36 +Author: Alan Coopersmith <alan.coopersmith@oracle.com> +Date: Tue Sep 5 17:01:58 2023 -0700 + + test: Add test case for CVE-2023-43786 (stack exhaustion in PutImage) + + Provided by Yair Mizrahi of the JFrog Vulnerability Research team + + Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> + +commit 7e21cb63b9a1ca760a06cc4cd9b19bbc3fcd8f51 +Author: Alan Coopersmith <alan.coopersmith@oracle.com> +Date: Sat Apr 29 18:30:34 2023 -0700 + + Fix CVE-2023-43789: Out of bounds read on XPM with corrupted colormap + + Found with clang's libfuzzer + + Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> + +commit a21e7bcf0ca3d8c1605b2721a545440260870438 +Author: Alan Coopersmith <alan.coopersmith@oracle.com> +Date: Sat Apr 29 18:29:29 2023 -0700 + + test: Add test case for CVE-2023-43789 (corrupt colormap info) + + Generated by clang's -fsanitize/libfuzzer + + Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> + +commit 2fa554b01ef6079a9b35df9332bdc4f139ed67e0 +Author: Alan Coopersmith <alan.coopersmith@oracle.com> +Date: Sat Apr 29 17:50:39 2023 -0700 + + Fix CVE-2023-43788: Out of bounds read in XpmCreateXpmImageFromBuffer + + When the test case for CVE-2022-46285 was run with the Address Sanitizer + enabled, it found an out-of-bounds read in ParseComment() when reading + from a memory buffer instead of a file, as it continued to look for the + closing comment marker past the end of the buffer. + + Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> + +commit 7f60f3428aa21d5d643eb75bfd9417cfabf48970 +Author: Alan Coopersmith <alan.coopersmith@oracle.com> +Date: Tue Sep 5 17:35:55 2023 -0700 + + Explicitly mark non-static symbols as export or hidden + + Hides private API from external linkage + + Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> + +commit 2695ccda5df58af60ebb15bb17f1570437554adb +Author: Alan Coopersmith <alan.coopersmith@oracle.com> +Date: Sat May 20 13:47:52 2023 -0700 + + test: use g_pattern_spec_match_string if available + + g_pattern_spec_match_string was introduced in glib 2.70 to replace + g_pattern_match_string which is deprecated in glib 2.70 and later. + + Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> + +commit 4524c578581b427145ae136844fc655a89e94777 +Author: Alan Coopersmith <alan.coopersmith@oracle.com> +Date: Mon Mar 27 18:35:46 2023 -0700 + + Set close-on-exec when opening files + + Relies on platforms with O_CLOEXEC support following POSIX requirement + to not copy the close-on-exec flag to the new fd in dup2(), but to leave + it unset instead, since that's how fd's are passed to child processes + to handled compressed files. + + Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> + commit f131de92d6c4e2f62934e85b012287276ecf009c Author: Matt Turner <mattst88@gmail.com> Date: Mon Apr 17 15:22:35 2023 -0400 @@ -1666,6 +1791,9 @@ Date: Tue Sep 21 17:57:35 2004 +0000 Removed inclusion of unnecessary kernel header on Linux. This may fail in an -ansi environment. +Notes: + Fixes CVE-2004-0687 (integer overflows) and CVE-2004-0688 (stack overflows) + commit 2773a7214e282f6f673483f5233b880505947c3f Author: Egbert Eich <eich@suse.de> Date: Fri Apr 23 18:42:32 2004 +0000 diff --git a/lib/libXpm/Makefile.bsd-wrapper b/lib/libXpm/Makefile.bsd-wrapper index da436a522..da1f0862f 100644 --- a/lib/libXpm/Makefile.bsd-wrapper +++ b/lib/libXpm/Makefile.bsd-wrapper @@ -1,6 +1,6 @@ -# $OpenBSD: Makefile.bsd-wrapper,v 1.4 2023/05/07 16:07:42 matthieu Exp $ +# $OpenBSD: Makefile.bsd-wrapper,v 1.5 2023/10/17 13:07:33 matthieu Exp $ -SHARED_LIBS= Xpm 9.0 +SHARED_LIBS= Xpm 10.0 CONFIGURE_ARGS += --disable-unit-tests diff --git a/lib/libXpm/configure.ac b/lib/libXpm/configure.ac index a69daaf0b..c2a666524 100644 --- a/lib/libXpm/configure.ac +++ b/lib/libXpm/configure.ac @@ -1,7 +1,7 @@ # Initialize Autoconf AC_PREREQ([2.60]) -AC_INIT([libXpm], [3.5.16], +AC_INIT([libXpm], [3.5.17], [https://gitlab.freedesktop.org/xorg/lib/libxpm/-/issues/], [libXpm]) AC_CONFIG_SRCDIR([Makefile.am]) AC_CONFIG_HEADERS([config.h]) @@ -103,6 +103,9 @@ fi AC_REQUIRE_AUX_FILE([tap-driver.sh]) XORG_ENABLE_UNIT_TESTS XORG_WITH_GLIB([2.46]) +if test "x$have_glib" = x"yes"; then + AC_CHECK_FUNCS([g_pattern_spec_match_string]) +fi XORG_MEMORY_CHECK_FLAGS AC_CONFIG_FILES([Makefile diff --git a/lib/libXpm/include/X11/xpm.h b/lib/libXpm/include/X11/xpm.h index f108f1f6e..a490b523f 100644 --- a/lib/libXpm/include/X11/xpm.h +++ b/lib/libXpm/include/X11/xpm.h @@ -73,6 +73,7 @@ # ifdef AMIGA # include "amigax.h" # else /* not AMIGA */ +# include <X11/Xfuncproto.h> # include <X11/Xlib.h> # include <X11/Xutil.h> # endif /* not AMIGA */ @@ -275,7 +276,12 @@ typedef struct { /* macros for forward declarations of functions with prototypes */ -#define FUNC(f, t, p) extern t f p +#ifndef _X_EXPORT +# define _X_EXPORT +# define _X_HIDDEN +#endif +#define FUNC(f, t, p) extern _X_EXPORT t f p +#define HFUNC(f, t, p) extern _X_HIDDEN t f p #define LFUNC(f, t, p) static t f p diff --git a/lib/libXpm/m4/libtool.m4 b/lib/libXpm/m4/libtool.m4 index 44e0ecff1..8a0e858b6 100644 --- a/lib/libXpm/m4/libtool.m4 +++ b/lib/libXpm/m4/libtool.m4 @@ -1627,11 +1627,6 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl lt_cv_sys_max_cmd_len=8192; ;; - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; - amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. diff --git a/lib/libXpm/src/RdFToBuf.c b/lib/libXpm/src/RdFToBuf.c index 1b386f81f..4ee926592 100644 --- a/lib/libXpm/src/RdFToBuf.c +++ b/lib/libXpm/src/RdFToBuf.c @@ -72,7 +72,7 @@ XpmReadFileToBuffer( *buffer_return = NULL; #ifndef VAX11C - fd = open(filename, O_RDONLY); + fd = open(filename, O_RDONLY | O_CLOEXEC); #else fd = open(filename, O_RDONLY, NULL); #endif diff --git a/lib/libXpm/src/RdFToI.c b/lib/libXpm/src/RdFToI.c index a16af887e..0ce78cd4a 100644 --- a/lib/libXpm/src/RdFToI.c +++ b/lib/libXpm/src/RdFToI.c @@ -53,7 +53,7 @@ LFUNC(OpenReadFile, int, (const char *filename, xpmData *mdata)); LFUNC(xpmDataClose, void, (xpmData *mdata)); -FUNC(xpmPipeThrough, FILE*, (int fd, +HFUNC(xpmPipeThrough, FILE*, (int fd, const char *cmd, const char *arg1, const char *mode)); @@ -212,7 +212,7 @@ OpenReadFile( mdata->stream.file = (stdin); mdata->type = XPMFILE; } else { - int fd = open(filename, O_RDONLY); + int fd = open(filename, O_RDONLY | O_CLOEXEC); #if defined(NO_ZPIPE) if ( fd < 0 ) return XpmOpenFailed; @@ -229,11 +229,11 @@ OpenReadFile( return (XpmNoMemory); strcpy(compressfile, filename); strcpy(compressfile + len, ext = ".Z"); - fd = open(compressfile, O_RDONLY); + fd = open(compressfile, O_RDONLY | O_CLOEXEC); if ( fd < 0 ) { strcpy(compressfile + len, ext = ".gz"); - fd = open(compressfile, O_RDONLY); + fd = open(compressfile, O_RDONLY | O_CLOEXEC); if ( fd < 0 ) { XpmFree(compressfile); diff --git a/lib/libXpm/src/WrFFrBuf.c b/lib/libXpm/src/WrFFrBuf.c index 0e57cc886..085b5a8e6 100644 --- a/lib/libXpm/src/WrFFrBuf.c +++ b/lib/libXpm/src/WrFFrBuf.c @@ -45,7 +45,7 @@ XpmWriteFileFromBuffer( char *buffer) { size_t fcheck, len; - FILE *fp = fopen(filename, "w"); + FILE *fp = fopen(filename, "w" FOPEN_CLOEXEC); if (!fp) return XpmOpenFailed; diff --git a/lib/libXpm/src/WrFFrI.c b/lib/libXpm/src/WrFFrI.c index 234197aae..4c3ecac98 100644 --- a/lib/libXpm/src/WrFFrI.c +++ b/lib/libXpm/src/WrFFrI.c @@ -315,7 +315,7 @@ WriteExtensions( #ifndef NO_ZPIPE -FUNC(xpmPipeThrough, FILE*, (int fd, +HFUNC(xpmPipeThrough, FILE*, (int fd, const char* cmd, const char* arg1, const char* mode)); @@ -336,7 +336,7 @@ OpenWriteFile( #ifndef NO_ZPIPE size_t len; #endif - int fd = open(filename, O_WRONLY|O_CREAT|O_TRUNC, 0644); + int fd = open(filename, O_WRONLY|O_CREAT|O_TRUNC|O_CLOEXEC, 0644); if ( fd < 0 ) return(XpmOpenFailed); #ifndef NO_ZPIPE diff --git a/lib/libXpm/src/XpmI.h b/lib/libXpm/src/XpmI.h index 90e6a91f1..669169351 100644 --- a/lib/libXpm/src/XpmI.h +++ b/lib/libXpm/src/XpmI.h @@ -103,6 +103,13 @@ extern FILE *popen(); # endif #endif +#ifdef O_CLOEXEC +# define FOPEN_CLOEXEC "e" +#else +# define FOPEN_CLOEXEC "" +# define O_CLOEXEC 0 +#endif + #define XPMMAXCMTLEN BUFSIZ typedef struct { unsigned int type; @@ -144,7 +151,7 @@ typedef struct { const char *Eoa; /* string ending assignment */ } xpmDataType; -extern xpmDataType xpmDataTypes[]; +extern _X_HIDDEN xpmDataType xpmDataTypes[]; /* * rgb values and ascii names (from rgb text file) rgb values, @@ -158,7 +165,7 @@ typedef struct { /* Maximum number of rgb mnemonics allowed in rgb text file. */ #define MAX_RGBNAMES 1024 -extern const char *xpmColorKeys[]; +extern _X_HIDDEN const char *xpmColorKeys[]; #define TRANSPARENT_COLOR "None" /* this must be a string! */ @@ -167,31 +174,31 @@ extern const char *xpmColorKeys[]; /* XPM internal routines */ -FUNC(xpmParseData, int, (xpmData *data, XpmImage *image, XpmInfo *info)); -FUNC(xpmParseDataAndCreate, int, (Display *display, xpmData *data, +HFUNC(xpmParseData, int, (xpmData *data, XpmImage *image, XpmInfo *info)); +HFUNC(xpmParseDataAndCreate, int, (Display *display, xpmData *data, XImage **image_return, XImage **shapeimage_return, XpmImage *image, XpmInfo *info, XpmAttributes *attributes)); -FUNC(xpmFreeColorTable, void, (XpmColor *colorTable, int ncolors)); +HFUNC(xpmFreeColorTable, void, (XpmColor *colorTable, int ncolors)); -FUNC(xpmInitAttributes, void, (XpmAttributes *attributes)); +HFUNC(xpmInitAttributes, void, (XpmAttributes *attributes)); -FUNC(xpmInitXpmImage, void, (XpmImage *image)); +HFUNC(xpmInitXpmImage, void, (XpmImage *image)); -FUNC(xpmInitXpmInfo, void, (XpmInfo *info)); +HFUNC(xpmInitXpmInfo, void, (XpmInfo *info)); -FUNC(xpmSetInfoMask, void, (XpmInfo *info, XpmAttributes *attributes)); -FUNC(xpmSetInfo, void, (XpmInfo *info, XpmAttributes *attributes)); -FUNC(xpmSetAttributes, void, (XpmAttributes *attributes, XpmImage *image, +HFUNC(xpmSetInfoMask, void, (XpmInfo *info, XpmAttributes *attributes)); +HFUNC(xpmSetInfo, void, (XpmInfo *info, XpmAttributes *attributes)); +HFUNC(xpmSetAttributes, void, (XpmAttributes *attributes, XpmImage *image, XpmInfo *info)); #if !defined(FOR_MSW) && !defined(AMIGA) -FUNC(xpmCreatePixmapFromImage, int, (Display *display, Drawable d, +HFUNC(xpmCreatePixmapFromImage, int, (Display *display, Drawable d, XImage *ximage, Pixmap *pixmap_return)); -FUNC(xpmCreateImageFromPixmap, void, (Display *display, Pixmap pixmap, +HFUNC(xpmCreateImageFromPixmap, void, (Display *display, Pixmap pixmap, XImage **ximage_return, unsigned int *width, unsigned int *height)); @@ -211,10 +218,10 @@ typedef struct { xpmHashAtom *atomTable; } xpmHashTable; -FUNC(xpmHashTableInit, int, (xpmHashTable *table)); -FUNC(xpmHashTableFree, void, (xpmHashTable *table)); -FUNC(xpmHashSlot, xpmHashAtom *, (xpmHashTable *table, char *s)); -FUNC(xpmHashIntern, int, (xpmHashTable *table, char *tag, void *data)); +HFUNC(xpmHashTableInit, int, (xpmHashTable *table)); +HFUNC(xpmHashTableFree, void, (xpmHashTable *table)); +HFUNC(xpmHashSlot, xpmHashAtom *, (xpmHashTable *table, char *s)); +HFUNC(xpmHashIntern, int, (xpmHashTable *table, char *tag, void *data)); #if defined(_MSC_VER) && defined(_M_X64) #define HashAtomData(i) ((void *)(long long)i) @@ -227,45 +234,45 @@ FUNC(xpmHashIntern, int, (xpmHashTable *table, char *tag, void *data)); /* I/O utility */ -FUNC(xpmNextString, int, (xpmData *mdata)); -FUNC(xpmNextUI, int, (xpmData *mdata, unsigned int *ui_return)); -FUNC(xpmGetString, int, (xpmData *mdata, char **sptr, unsigned int *l)); +HFUNC(xpmNextString, int, (xpmData *mdata)); +HFUNC(xpmNextUI, int, (xpmData *mdata, unsigned int *ui_return)); +HFUNC(xpmGetString, int, (xpmData *mdata, char **sptr, unsigned int *l)); #define xpmGetC(mdata) \ ((!mdata->type || mdata->type == XPMBUFFER) ? \ (*mdata->cptr++) : (getc(mdata->stream.file))) -FUNC(xpmNextWord, unsigned int, +HFUNC(xpmNextWord, unsigned int, (xpmData *mdata, char *buf, unsigned int buflen)); -FUNC(xpmGetCmt, int, (xpmData *mdata, char **cmt)); -FUNC(xpmParseHeader, int, (xpmData *mdata)); -FUNC(xpmParseValues, int, (xpmData *data, unsigned int *width, +HFUNC(xpmGetCmt, int, (xpmData *mdata, char **cmt)); +HFUNC(xpmParseHeader, int, (xpmData *mdata)); +HFUNC(xpmParseValues, int, (xpmData *data, unsigned int *width, unsigned int *height, unsigned int *ncolors, unsigned int *cpp, unsigned int *x_hotspot, unsigned int *y_hotspot, unsigned int *hotspot, unsigned int *extensions)); -FUNC(xpmParseColors, int, (xpmData *data, unsigned int ncolors, +HFUNC(xpmParseColors, int, (xpmData *data, unsigned int ncolors, unsigned int cpp, XpmColor **colorTablePtr, xpmHashTable *hashtable)); -FUNC(xpmParseExtensions, int, (xpmData *data, XpmExtension **extensions, +HFUNC(xpmParseExtensions, int, (xpmData *data, XpmExtension **extensions, unsigned int *nextensions)); /* RGB utility */ -FUNC(xpmReadRgbNames, int, (const char *rgb_fname, xpmRgbName *rgbn)); -FUNC(xpmGetRgbName, char *, (xpmRgbName *rgbn, int rgbn_max, +HFUNC(xpmReadRgbNames, int, (const char *rgb_fname, xpmRgbName *rgbn)); +HFUNC(xpmGetRgbName, char *, (xpmRgbName *rgbn, int rgbn_max, int red, int green, int blue)); -FUNC(xpmFreeRgbNames, void, (xpmRgbName *rgbn, int rgbn_max)); +HFUNC(xpmFreeRgbNames, void, (xpmRgbName *rgbn, int rgbn_max)); #ifdef FOR_MSW -FUNC(xpmGetRGBfromName,int, (char *name, int *r, int *g, int *b)); +HFUNC(xpmGetRGBfromName,int, (char *name, int *r, int *g, int *b)); #endif #ifndef AMIGA -FUNC(xpm_xynormalizeimagebits, void, (register unsigned char *bp, +HFUNC(xpm_xynormalizeimagebits, void, (register unsigned char *bp, register XImage *img)); -FUNC(xpm_znormalizeimagebits, void, (register unsigned char *bp, +HFUNC(xpm_znormalizeimagebits, void, (register unsigned char *bp, register XImage *img)); /* @@ -313,7 +320,7 @@ FUNC(xpm_znormalizeimagebits, void, (register unsigned char *bp, #endif /* not AMIGA */ #ifdef NEED_STRDUP -FUNC(xpmstrdup, char *, (char *s1)); +HFUNC(xpmstrdup, char *, (char *s1)); #else #undef xpmstrdup #define xpmstrdup strdup @@ -321,14 +328,14 @@ FUNC(xpmstrdup, char *, (char *s1)); #endif #ifdef NEED_STRCASECMP -FUNC(xpmstrcasecmp, int, (char *s1, char *s2)); +HFUNC(xpmstrcasecmp, int, (char *s1, char *s2)); #else #undef xpmstrcasecmp #define xpmstrcasecmp strcasecmp #include <strings.h> #endif -FUNC(xpmatoui, unsigned int, +HFUNC(xpmatoui, unsigned int, (char *p, unsigned int l, unsigned int *ui_return)); #endif diff --git a/lib/libXpm/src/rgb.c b/lib/libXpm/src/rgb.c index 5c350eb3b..de0d17f81 100644 --- a/lib/libXpm/src/rgb.c +++ b/lib/libXpm/src/rgb.c @@ -66,7 +66,7 @@ xpmReadRgbNames( xpmRgbName *rgb; /* Open the rgb text file. Abort if error. */ - if ((rgbf = fopen(rgb_fname, "r")) == NULL) + if ((rgbf = fopen(rgb_fname, "r" FOPEN_CLOEXEC)) == NULL) return 0; /* Loop reading each line in the file. */ diff --git a/lib/libXpm/test/TestAllFiles.h b/lib/libXpm/test/TestAllFiles.h index 505b2a32c..da171bbd5 100644 --- a/lib/libXpm/test/TestAllFiles.h +++ b/lib/libXpm/test/TestAllFiles.h @@ -32,6 +32,12 @@ #include "config.h" +/* g_pattern_spec_match_string is available in glib 2.70 and later, + to replace the deprecated g_pattern_match_string */ +#ifdef HAVE_G_PATTERN_SPEC_MATCH_STRING +#define g_pattern_match_string g_pattern_spec_match_string +#endif + #define DEFAULT_TIMEOUT 10 /* maximum seconds for each file */ static sigjmp_buf jump_env; diff --git a/lib/libXpm/test/XpmRead.c b/lib/libXpm/test/XpmRead.c index df7a826f6..a231419c4 100644 --- a/lib/libXpm/test/XpmRead.c +++ b/lib/libXpm/test/XpmRead.c @@ -33,6 +33,10 @@ #include "TestAllFiles.h" +#ifndef O_CLOEXEC +# define O_CLOEXEC 0 +#endif + #ifndef g_assert_no_errno /* defined in glib 2.66 & later */ #define g_assert_no_errno(n) g_assert_cmpint(n, >=, 0) #endif @@ -147,7 +151,7 @@ TestReadFileToBuffer(const gchar *filepath) g_assert_nonnull(buffer); /* Read file ourselves and verify the data matches */ - g_assert_no_errno(fd = open(filepath, O_RDONLY)); + g_assert_no_errno(fd = open(filepath, O_RDONLY | O_CLOEXEC)); while ((rd = read(fd, readbuf, sizeof(readbuf))) > 0) { g_assert_cmpmem(b, rd, readbuf, rd); b += rd; diff --git a/lib/libXpm/test/XpmWrite.c b/lib/libXpm/test/XpmWrite.c index 49b5b2132..998b1bbb6 100644 --- a/lib/libXpm/test/XpmWrite.c +++ b/lib/libXpm/test/XpmWrite.c @@ -38,6 +38,10 @@ #include "TestAllFiles.h" #include "CompareXpmImage.h" +#ifndef O_CLOEXEC +# define O_CLOEXEC 0 +#endif + #ifndef g_assert_no_errno /* defined in glib 2.66 & later */ #define g_assert_no_errno(n) g_assert_cmpint(n, >=, 0) #endif @@ -295,7 +299,7 @@ TestWriteFileFromBuffer(const gchar *filepath) ssize_t rd; /* Read file ourselves and verify the data matches */ - g_assert_no_errno(fd = open(newfilepath, O_RDONLY)); + g_assert_no_errno(fd = open(newfilepath, O_RDONLY | O_CLOEXEC)); while ((rd = read(fd, readbuf, sizeof(readbuf))) > 0) { g_assert_cmpmem(b, rd, readbuf, rd); b += rd; diff --git a/lib/libXpm/test/rgb.c b/lib/libXpm/test/rgb.c index a5ad58304..7b19f7966 100644 --- a/lib/libXpm/test/rgb.c +++ b/lib/libXpm/test/rgb.c @@ -23,7 +23,7 @@ #include "config.h" -#include "../src/XpmI.h" +#include "../src/rgb.c" #include <glib.h> /* |