[arch-commits] Commit in xemacs/trunk (4 files)
Stéphane Gaudreault
stephane at archlinux.org
Tue Oct 19 23:18:53 UTC 2010
Date: Tuesday, October 19, 2010 @ 19:18:53
Author: stephane
Revision: 96361
db-5.1 rebuild
Apply security patches from Gentoo
Fix FS#20977 and FS#21148
Added:
xemacs/trunk/xemacs-21.5.29-large-images.patch
xemacs/trunk/xemacs-21.5.29-optimization-bug.patch
xemacs/trunk/xemacs-21.5.29-vcdiff.patch
Modified:
xemacs/trunk/PKGBUILD
---------------------------------------+
PKGBUILD | 50 ++++++++++++----
xemacs-21.5.29-large-images.patch | 96 ++++++++++++++++++++++++++++++++
xemacs-21.5.29-optimization-bug.patch | 14 ++++
xemacs-21.5.29-vcdiff.patch | 19 ++++++
4 files changed, 167 insertions(+), 12 deletions(-)
Modified: PKGBUILD
===================================================================
--- PKGBUILD 2010-10-19 22:10:37 UTC (rev 96360)
+++ PKGBUILD 2010-10-19 23:18:53 UTC (rev 96361)
@@ -1,25 +1,46 @@
# $Id$
# Maintainer: juergen <juergen at archlinux.org>
+# Contributor : Stéphane Gaudreault <stephane at archlinux.org>
pkgname=xemacs
pkgver=21.5.29
-pkgrel=2
+pkgrel=3
pkgdesc="highly customizable open source text editor and application development system forked from GNU Emacs"
arch=(i686 x86_64)
url="http://www.xemacs.org/"
license=('GPL')
-depends=('db>=4.8' 'libpng' 'libtiff' 'gpm>=1.20.4' 'bash' 'ncurses>=5.6-7' 'desktop-file-utils' 'libxaw' 'libjpeg')
+depends=('db' 'libpng' 'libtiff' 'gpm>=1.20.4' 'bash' 'ncurses>=5.6-7' 'desktop-file-utils' 'libxaw' 'libjpeg')
optdepends=('xorg-fonts-75dpi: X bitmap fonts needed for the interface'
- 'xorg-fonts-100dpi: X bitmap fonts needed for the interface')
+ 'xorg-fonts-100dpi: X bitmap fonts needed for the interface')
makedepends=('giflib' 'xbitmaps')
install=xemacs.install
-source=(http://ftp.xemacs.org/pub/xemacs/beta/$pkgname-$pkgver.tar.gz xemacs.desktop)
-md5sums=('5364192ae0d3de23d9f4ce197e6493b5' 'a4d3d5c0aa2c7ce7bec491f809ca3694')
-
+source=(http://ftp.xemacs.org/pub/xemacs/beta/$pkgname-$pkgver.tar.gz
+ xemacs.desktop
+ xemacs-21.5.29-large-images.patch
+ xemacs-21.5.29-optimization-bug.patch
+ xemacs-21.5.29-vcdiff.patch)
+md5sums=('5364192ae0d3de23d9f4ce197e6493b5'
+ 'a4d3d5c0aa2c7ce7bec491f809ca3694'
+ '23ca5a7c50fe7ebebd9fc4525882cdf1'
+ 'eb061b10ea3bbe1026df5326ae1618e3'
+ '4ada657a351b226cdd557f9faaeab075')
+
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
- infodir=/usr/share/info
- mandir=/usr/share/man/man1
+
+ # Fix security issue in vcdiff script
+ patch -Np0 -i ../xemacs-21.5.29-vcdiff.patch
+
+ # Fix problem caused by improper optimization with GCC>=4.1.2 on i686
+ # (and possibly other arches). See
+ # http://tracker.xemacs.org/XEmacs/its/issue354
+ # for the upstream bug report.
+ patch -Np0 -i ../xemacs-21.5.29-optimization-bug.patch
+
+ # Fix for security bug
+ # See http://bugs.gentoo.org/show_bug.cgi?id=275397
+ patch -Np1 -i ../xemacs-21.5.29-large-images.patch
+
./configure --build="${CHOST}" --prefix=/usr --with-dynamic \
--with-x11 --without-postgresql --with-athena=xaw \
--enable-database=berkdb --without-ldap \
@@ -28,12 +49,17 @@
--enable-external-widget \
--with-jpeg --with-png --with-tiff \
--with-ncurses --with-pop --with-xfs --disable-sound \
- --infodir=${infodir} \
- --mandir=${mandir} || return 1
+ --infodir=/usr/share/info \
+ --with-mule \
+ --mandir=/usr/share/man/man1
- make || return 1
- make -j1 prefix="${pkgdir}/usr" mandir="${pkgdir}${mandir}" infodir="${pkgdir}${infodir}" install gzip-el || return 1
+ make
+}
+package() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ make -j1 prefix="${pkgdir}/usr" mandir="${pkgdir}/usr/share/man/man1" infodir="${pkgdir}/usr/share/info" install gzip-el
+
rm ${pkgdir}/usr/bin/{b2m,ctags,etags,rcs-checkin}
rm ${pkgdir}/usr/share/man/man1/{ctags.1,etags.1}
Added: xemacs-21.5.29-large-images.patch
===================================================================
--- xemacs-21.5.29-large-images.patch (rev 0)
+++ xemacs-21.5.29-large-images.patch 2010-10-19 23:18:53 UTC (rev 96361)
@@ -0,0 +1,96 @@
+APPROVE COMMIT 21.5
+
+This patch has been committed. When trying to open very large image
+files (or image files with header files that claim the image is very
+large), we multiply length times width to get the number of pixels in
+the image (and possibly multiply that number if a pixel occupies more
+than 1 byte). The multiplication can overflow, resulting in passing
+negative or insufficiently positive size values to malloc. This patch
+checks whether the multiplication will overflow. If so, XEmacs
+refuses to attempt to load the image.
+
+(Patch taken from upstream, already applied there)
+
+--- a/src/glyphs-eimage.c Mon Jun 29 08:20:47 2009 -0600
++++ b/src/glyphs-eimage.c Wed Jul 01 15:42:54 2009 -0600
+@@ -409,6 +409,7 @@
+ */
+
+ {
++ UINT_64_BIT pixels_sq;
+ int jpeg_gray = 0; /* if we're dealing with a grayscale */
+ /* Step 4: set parameters for decompression. */
+
+@@ -431,7 +432,10 @@
+ jpeg_start_decompress (&cinfo);
+
+ /* Step 6: Read in the data and put into EImage format (8bit RGB triples)*/
+-
++ pixels_sq =
++ (UINT_64_BIT) cinfo.output_width * (UINT_64_BIT) cinfo.output_height;
++ if (pixels_sq > ((size_t) -1) / 3)
++ signal_image_error ("JPEG image too large to instantiate", instantiator);
+ unwind.eimage =
+ xnew_binbytes (cinfo.output_width * cinfo.output_height * 3);
+ if (!unwind.eimage)
+@@ -677,6 +681,7 @@
+ {
+ ColorMapObject *cmo = unwind.giffile->SColorMap;
+ int i, j, row, pass, interlace, slice;
++ UINT_64_BIT pixels_sq;
+ Binbyte *eip;
+ /* interlaced gifs have rows in this order:
+ 0, 8, 16, ..., 4, 12, 20, ..., 2, 6, 10, ..., 1, 3, 5, ... */
+@@ -685,6 +690,9 @@
+
+ height = unwind.giffile->SHeight;
+ width = unwind.giffile->SWidth;
++ pixels_sq = (UINT_64_BIT) width * (UINT_64_BIT) height;
++ if (pixels_sq > ((size_t) -1) / (3 * unwind.giffile->ImageCount))
++ signal_image_error ("GIF image too large to instantiate", instantiator);
+ unwind.eimage =
+ xnew_binbytes (width * height * 3 * unwind.giffile->ImageCount);
+ if (!unwind.eimage)
+@@ -948,11 +956,15 @@
+ {
+ int y;
+ Binbyte **row_pointers;
++ UINT_64_BIT pixels_sq;
+ height = info_ptr->height;
+ width = info_ptr->width;
++ pixels_sq = (UINT_64_BIT) width * (UINT_64_BIT) height;
++ if (pixels_sq > ((size_t) -1) / 3)
++ signal_image_error ("PNG image too large to instantiate", instantiator);
+
+ /* Wow, allocate all the memory. Truly, exciting. */
+- unwind.eimage = xnew_array_and_zero (Binbyte, width * height * 3);
++ unwind.eimage = xnew_array_and_zero (Binbyte, (size_t) (pixels_sq * 3));
+ /* libpng expects that the image buffer passed in contains a
+ picture to draw on top of if the png has any transparencies.
+ This could be a good place to pass that in... */
+@@ -1299,6 +1311,7 @@
+
+ uint32 *raster;
+ Binbyte *ep;
++ UINT_64_BIT pixels_sq;
+
+ assert (!NILP (data));
+
+@@ -1321,12 +1334,15 @@
+
+ TIFFGetField (unwind.tiff, TIFFTAG_IMAGEWIDTH, &width);
+ TIFFGetField (unwind.tiff, TIFFTAG_IMAGELENGTH, &height);
+- unwind.eimage = xnew_binbytes (width * height * 3);
++ pixels_sq = (UINT_64_BIT) width * (UINT_64_BIT) height;
++ if (pixels_sq >= 1 << 29)
++ signal_image_error ("TIFF image too large to instantiate", instantiator);
++ unwind.eimage = xnew_binbytes (pixels_sq * 3);
+
+ /* #### This is little more than proof-of-concept/function testing.
+ It needs to be reimplemented via scanline reads for both memory
+ compactness. */
+- raster = (uint32*) _TIFFmalloc (width * height * sizeof (uint32));
++ raster = (uint32*) _TIFFmalloc ((tsize_t) (pixels_sq * sizeof (uint32)));
+ if (raster != NULL)
+ {
+ int i, j;
Added: xemacs-21.5.29-optimization-bug.patch
===================================================================
--- xemacs-21.5.29-optimization-bug.patch (rev 0)
+++ xemacs-21.5.29-optimization-bug.patch 2010-10-19 23:18:53 UTC (rev 96361)
@@ -0,0 +1,14 @@
+Work around a GCC optimization bug as described in
+http://tracker.xemacs.org/XEmacs/its/issue354
+
+--- src/dumper.c.~1~ 2008-01-26 09:54:11.000000000 +0100
++++ src/dumper.c 2008-05-03 10:17:03.000000000 +0200
+@@ -2584,7 +2584,7 @@
+ #endif /* !WIN32_NATIVE */
+
+
+-static int
++int
+ pdump_file_try (Wexttext *exe_path)
+ {
+ Wexttext *w = exe_path + wext_strlen (exe_path);
Added: xemacs-21.5.29-vcdiff.patch
===================================================================
--- xemacs-21.5.29-vcdiff.patch (rev 0)
+++ xemacs-21.5.29-vcdiff.patch 2010-10-19 23:18:53 UTC (rev 96361)
@@ -0,0 +1,19 @@
+--- lib-src/vcdiff.~1~ 1996-12-18 23:42:33.000000000 +0100
++++ lib-src/vcdiff 2008-04-09 08:20:36.000000000 +0200
+@@ -79,14 +79,14 @@
+ case $f in
+ s.* | */s.*)
+ if
+- rev1=/tmp/geta$$
++ rev1=`mktemp /tmp/geta.XXXXXXXX`
+ get -s -p -k $sid1 "$f" > $rev1 &&
+ case $sid2 in
+ '')
+ workfile=`expr " /$f" : '.*/s.\(.*\)'`
+ ;;
+ *)
+- rev2=/tmp/getb$$
++ rev2=`mktemp /tmp/getb.XXXXXXXX`
+ get -s -p -k $sid2 "$f" > $rev2
+ workfile=$rev2
+ esac
More information about the arch-commits
mailing list