Accepting request 115485 from X11:XOrg

Pushing X11:XOrg

OBS-URL: https://build.opensuse.org/request/show/115485
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/xorg-x11-libs?expand=0&rev=119
This commit is contained in:
Stephan Kulow 2012-05-08 10:06:32 +00:00 committed by Git OBS Bridge
commit a17347b05c
37 changed files with 32 additions and 1178 deletions

4
README.meta Normal file
View File

@ -0,0 +1,4 @@
This package is a metapackage, created for compatibility.
The X.Org libraries now are all split following the shared library packaging
policy, and all have their own devel package.

View File

@ -1,32 +0,0 @@
From d11ee5886e9d9ec610051a206b135a4cdc1e09a0 Mon Sep 17 00:00:00 2001
From: Thomas Hoger <thoger@redhat.com>
Date: Mon, 8 Aug 2011 18:03:09 +0200
Subject: [PATCH] LZW decompress: fix for CVE-2011-2895
Specially crafted LZW stream can crash an application using libXfont
that is used to open untrusted font files. With X server, this may
allow privilege escalation when exploited
Reviewed-by: Matthieu Herrb <matthieu.herrb@laas.fr>
Signed-off-by: Matthieu Herrb <matthieu.herrb@laas.fr>
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
---
src/fontfile/decompress.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/src/fontfile/decompress.c b/src/fontfile/decompress.c
index b1fc37b..c8171dd 100644
--- a/src/fontfile/decompress.c
+++ b/src/fontfile/decompress.c
@@ -259,6 +259,8 @@ BufCompressedFill (BufFilePtr f)
*/
while ( code >= 256 )
{
+ if (stackp - de_stack >= STACK_SIZE - 1)
+ return BUFFILEEOF;
*stackp++ = file->tab_suffix[code];
code = file->tab_prefix[code];
}
--
1.7.4.1

View File

@ -1,12 +0,0 @@
xorg-x11-libs
obsoletes "XFree86-compat-libs-<targettype> XFree86-libs-<targettype>"
provides "XFree86-compat-libs-<targettype> XFree86-libs-<targettype>"
targettype x86 provides "baselibs-x86:<prefix>/usr/X11R6/lib/libX11.so.6"
targettype 32bit provides "libXaw.so.8 libXaw.so.7 libXaw.so.6 libXaw8.so.8 libXaw7.so.7 libXaw6.so.6"
targettype 64bit provides "libXaw.so.8()(64bit) libXaw.so.7()(64bit) libXaw.so.6()(64bit) libXaw8.so.8()(64bit) libXaw7.so.7()(64bit) libXaw6.so.6()(64bit)"
xorg-x11-devel
obsoletes "XFree86-devel-<targettype>"
provides "XFree86-devel-<targettype>"
requires -xorg-x11-<targettype>
requires "xorg-x11-libs-<targettype> = <version>"
libpciaccess0

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ab7af9754568af60b54be67c0966cb742ad7eb7ff73faa2c76e0b71c988f2419
size 284331

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:25f07cf847cbe91d36c20f348b4b9494c4504fe02966e8cdf65cf56316a70edc
size 246815

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ce3a66e2f6fa85b22280ab9cc1b2a113a2cb0ade9470914c7c3d6ac1d44b259a
size 268322

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c7e50c85803e326b3207bcae2bfcb05353f3de18238fb9082bc7ae8f6e329003
size 214200

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3daeab01ee702cbc4ac91f11d553710ad31d4151510386093c186a94ccd4beba
size 635256

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4359d62021f0ebf44af36c652b669f803c4933e4b2e9f166c57393ecd5dc0e98
size 3471

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:32294d28f4ee46db310c344546d98484728b7d52158c6d7c25bba02563b41aad
size 246715

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a06ef74579e2c06f9490e682b8e7ac915cb5280ee47bb071a2b850637a2bf6fe
size 272680

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:bc6169c826d3cb17435ca84e1b479d65e4b51df1e48bbc3ec39a9cabf842c7a8
size 249029

BIN
libXevie-1.0.3.tar.bz2 (Stored with Git LFS)

Binary file not shown.

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f79245652901d20092092e942155d32b8dde15527637db3c09a1adc83672e9cc
size 438358

BIN
libXfontcache-1.0.5.tar.bz2 (Stored with Git LFS)

Binary file not shown.

View File

@ -1,791 +0,0 @@
--- src/xftglyphs.c.orig 2009-01-30 00:19:09.000000000 +0100
+++ src/xftglyphs.c 2010-04-05 00:23:18.000000000 +0200
@@ -21,27 +21,18 @@
*/
#include "xftint.h"
-#include <freetype/ftoutln.h>
#if HAVE_FT_GLYPHSLOT_EMBOLDEN
#include <freetype/ftsynth.h>
#endif
-static const int filters[3][3] = {
- /* red */
-#if 0
-{ 65538*4/7,65538*2/7,65538*1/7 },
- /* green */
-{ 65536*1/4, 65536*2/4, 65537*1/4 },
- /* blue */
-{ 65538*1/7,65538*2/7,65538*4/7 },
+#if FREETYPE_MAJOR*10000 + FREETYPE_MINOR*100 + FREETYPE_PATCH < 20202
+# error "FreeType 2.2.2 or later required to compile this version of libXft"
#endif
-{ 65538*9/13,65538*3/13,65538*1/13 },
- /* green */
-{ 65538*1/6, 65538*4/6, 65538*1/6 },
- /* blue */
-{ 65538*1/13,65538*3/13,65538*9/13 },
-};
+
+#include FT_OUTLINE_H
+#include FT_LCD_FILTER_H
+#include FT_SYNTHESIS_H
/*
* Validate the memory info for a font
@@ -69,6 +60,295 @@ _XftFontValidateMemory (Display *dpy, Xf
font->glyph_memory, glyph_memory);
}
+
+/* we sometimes need to convert the glyph bitmap in a FT_GlyphSlot
+ * into a different format. For example, we want to convert a
+ * FT_PIXEL_MODE_LCD or FT_PIXEL_MODE_LCD_V bitmap into a 32-bit
+ * ARGB or ABGR bitmap.
+ *
+ * this function prepares a target descriptor for this operation.
+ *
+ * input :: target bitmap descriptor. The function will set its
+ * 'width', 'rows' and 'pitch' fields, and only these
+ *
+ * slot :: the glyph slot containing the source bitmap. this
+ * function assumes that slot->format == FT_GLYPH_FORMAT_BITMAP
+ *
+ * mode :: the requested final rendering mode. supported values are
+ * MONO, NORMAL (i.e. gray), LCD and LCD_V
+ *
+ * the function returns the size in bytes of the corresponding buffer,
+ * it's up to the caller to allocate the corresponding memory block
+ * before calling _fill_xrender_bitmap
+ *
+ * it also returns -1 in case of error (e.g. incompatible arguments,
+ * like trying to convert a gray bitmap into a monochrome one)
+ */
+static int
+_compute_xrender_bitmap_size( FT_Bitmap* target,
+ FT_GlyphSlot slot,
+ FT_Render_Mode mode )
+{
+ FT_Bitmap* ftbit;
+ int width, height, pitch;
+
+ if ( slot->format != FT_GLYPH_FORMAT_BITMAP )
+ return -1;
+
+ // compute the size of the final bitmap
+ ftbit = &slot->bitmap;
+
+ width = ftbit->width;
+ height = ftbit->rows;
+ pitch = (width+3) & ~3;
+
+ switch ( ftbit->pixel_mode )
+ {
+ case FT_PIXEL_MODE_MONO:
+ if ( mode == FT_RENDER_MODE_MONO )
+ {
+ pitch = (((width+31) & ~31) >> 3);
+ break;
+ }
+ /* fall-through */
+
+ case FT_PIXEL_MODE_GRAY:
+ if ( mode == FT_RENDER_MODE_LCD ||
+ mode == FT_RENDER_MODE_LCD_V )
+ {
+ /* each pixel is replicated into a 32-bit ARGB value */
+ pitch = width*4;
+ }
+ break;
+
+ case FT_PIXEL_MODE_LCD:
+ if ( mode != FT_RENDER_MODE_LCD )
+ return -1;
+
+ /* horz pixel triplets are packed into 32-bit ARGB values */
+ width /= 3;
+ pitch = width*4;
+ break;
+
+ case FT_PIXEL_MODE_LCD_V:
+ if ( mode != FT_RENDER_MODE_LCD_V )
+ return -1;
+
+ /* vert pixel triplets are packed into 32-bit ARGB values */
+ height /= 3;
+ pitch = width*4;
+ break;
+
+ default: /* unsupported source format */
+ return -1;
+ }
+
+ target->width = width;
+ target->rows = height;
+ target->pitch = pitch;
+ target->buffer = NULL;
+
+ return pitch * height;
+}
+
+/* this functions converts the glyph bitmap found in a FT_GlyphSlot
+ * into a different format (see _compute_xrender_bitmap_size)
+ *
+ * you should call this function after _compute_xrender_bitmap_size
+ *
+ * target :: target bitmap descriptor. Note that its 'buffer' pointer
+ * must point to memory allocated by the caller
+ *
+ * slot :: the glyph slot containing the source bitmap
+ *
+ * mode :: the requested final rendering mode
+ *
+ * bgr :: boolean, set if BGR or VBGR pixel ordering is needed
+ */
+static void
+_fill_xrender_bitmap( FT_Bitmap* target,
+ FT_GlyphSlot slot,
+ FT_Render_Mode mode,
+ int bgr )
+{
+ FT_Bitmap* ftbit = &slot->bitmap;
+
+ {
+ unsigned char* srcLine = ftbit->buffer;
+ unsigned char* dstLine = target->buffer;
+ int src_pitch = ftbit->pitch;
+ int width = target->width;
+ int height = target->rows;
+ int pitch = target->pitch;
+ int subpixel;
+ int h;
+
+ subpixel = ( mode == FT_RENDER_MODE_LCD ||
+ mode == FT_RENDER_MODE_LCD_V );
+
+ if ( src_pitch < 0 )
+ srcLine -= src_pitch*(ftbit->rows-1);
+
+ switch ( ftbit->pixel_mode )
+ {
+ case FT_PIXEL_MODE_MONO:
+ if ( subpixel ) /* convert mono to ARGB32 values */
+ {
+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch )
+ {
+ int x;
+
+ for ( x = 0; x < width; x++ )
+ {
+ if ( srcLine[(x >> 3)] & (0x80 >> (x & 7)) )
+ ((unsigned int*)dstLine)[x] = 0xffffffffU;
+ }
+ }
+ }
+ else if ( mode == FT_RENDER_MODE_NORMAL ) /* convert mono to 8-bit gray */
+ {
+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch )
+ {
+ int x;
+
+ for ( x = 0; x < width; x++ )
+ {
+ if ( srcLine[(x >> 3)] & (0x80 >> (x & 7)) )
+ dstLine[x] = 0xff;
+ }
+ }
+ }
+ else /* copy mono to mono */
+ {
+ int bytes = (width+7) >> 3;
+
+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch )
+ memcpy( dstLine, srcLine, bytes );
+ }
+ break;
+
+ case FT_PIXEL_MODE_GRAY:
+ if ( subpixel ) /* convert gray to ARGB32 values */
+ {
+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch )
+ {
+ int x;
+ unsigned int* dst = (unsigned int*)dstLine;
+
+ for ( x = 0; x < width; x++ )
+ {
+ unsigned int pix = srcLine[x];
+
+ pix |= (pix << 8);
+ pix |= (pix << 16);
+
+ dst[x] = pix;
+ }
+ }
+ }
+ else /* copy gray into gray */
+ {
+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch )
+ memcpy( dstLine, srcLine, width );
+ }
+ break;
+
+ case FT_PIXEL_MODE_LCD:
+ if ( !bgr )
+ {
+ /* convert horizontal RGB into ARGB32 */
+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch )
+ {
+ int x;
+ unsigned char* src = srcLine;
+ unsigned int* dst = (unsigned int*)dstLine;
+
+ for ( x = 0; x < width; x++, src += 3 )
+ {
+ unsigned int pix;
+
+ pix = ((unsigned int)src[0] << 16) |
+ ((unsigned int)src[1] << 8) |
+ ((unsigned int)src[2] ) |
+ ((unsigned int)src[1] << 24) ;
+
+ dst[x] = pix;
+ }
+ }
+ }
+ else
+ {
+ /* convert horizontal BGR into ARGB32 */
+ for ( h = height; h > 0; h--, srcLine += src_pitch, dstLine += pitch )
+ {
+ int x;
+ unsigned char* src = srcLine;
+ unsigned int* dst = (unsigned int*)dstLine;
+
+ for ( x = 0; x < width; x++, src += 3 )
+ {
+ unsigned int pix;
+
+ pix = ((unsigned int)src[2] << 16) |
+ ((unsigned int)src[1] << 8) |
+ ((unsigned int)src[0] ) |
+ ((unsigned int)src[1] << 24) ;
+
+ dst[x] = pix;
+ }
+ }
+ }
+ break;
+
+ default: /* FT_PIXEL_MODE_LCD_V */
+ /* convert vertical RGB into ARGB32 */
+ if ( !bgr )
+ {
+ for ( h = height; h > 0; h--, srcLine += 3*src_pitch, dstLine += pitch )
+ {
+ int x;
+ unsigned char* src = srcLine;
+ unsigned int* dst = (unsigned int*)dstLine;
+
+ for ( x = 0; x < width; x++, src += 1 )
+ {
+ unsigned int pix;
+
+ pix = ((unsigned int)src[0] << 16) |
+ ((unsigned int)src[src_pitch] << 8) |
+ ((unsigned int)src[src_pitch*2] ) |
+ ((unsigned int)src[src_pitch] << 24) ;
+
+ dst[x] = pix;
+ }
+ }
+ }
+ else
+ {
+ for ( h = height; h > 0; h--, srcLine += 3*src_pitch, dstLine += pitch )
+ {
+ int x;
+ unsigned char* src = srcLine;
+ unsigned int* dst = (unsigned int*)dstLine;
+
+ for ( x = 0; x < width; x++, src += 1 )
+ {
+ unsigned int pix;
+
+ pix = ((unsigned int)src[src_pitch*2] << 16) |
+ ((unsigned int)src[src_pitch] << 8) |
+ ((unsigned int)src[0] ) |
+ ((unsigned int)src[src_pitch] << 24) ;
+
+ dst[x] = pix;
+ }
+ }
+ }
+ }
+ }
+}
+
+
_X_EXPORT void
XftFontLoadGlyphs (Display *dpy,
XftFont *pub,
@@ -87,20 +367,14 @@ XftFontLoadGlyphs (Display *dpy,
unsigned char *bufBitmap = bufLocal;
int bufSize = sizeof (bufLocal);
int size, pitch;
- unsigned char bufLocalRgba[4096];
- unsigned char *bufBitmapRgba = bufLocalRgba;
- int bufSizeRgba = sizeof (bufLocalRgba);
- int sizergba, pitchrgba, widthrgba;
int width;
int height;
int left, right, top, bottom;
- int hmul = 1;
- int vmul = 1;
- FT_Bitmap ftbit;
- FT_Matrix matrix;
+ FT_Bitmap* ftbit;
+ FT_Bitmap local;
FT_Vector vector;
- Bool subpixel = False;
FT_Face face;
+ FT_Render_Mode mode = FT_RENDER_MODE_MONO;
if (!info)
return;
@@ -110,24 +384,19 @@ XftFontLoadGlyphs (Display *dpy,
if (!face)
return;
- matrix.xx = matrix.yy = 0x10000L;
- matrix.xy = matrix.yx = 0;
-
if (font->info.antialias)
{
switch (font->info.rgba) {
case FC_RGBA_RGB:
case FC_RGBA_BGR:
- matrix.xx *= 3;
- subpixel = True;
- hmul = 3;
+ mode = FT_RENDER_MODE_LCD;
break;
case FC_RGBA_VRGB:
case FC_RGBA_VBGR:
- matrix.yy *= 3;
- vmul = 3;
- subpixel = True;
+ mode = FT_RENDER_MODE_LCD_V;
break;
+ default:
+ mode = FT_RENDER_MODE_NORMAL;
}
}
@@ -148,7 +417,10 @@ XftFontLoadGlyphs (Display *dpy,
if (xftg->glyph_memory)
continue;
+ FT_Library_SetLcdFilter( _XftFTlibrary, FT_LCD_FILTER_DEFAULT );
+
error = FT_Load_Glyph (face, glyphindex, font->info.load_flags);
+
if (error)
{
/*
@@ -181,7 +453,7 @@ XftFontLoadGlyphs (Display *dpy,
/*
* Compute glyph metrics from FreeType information
*/
- if(font->info.transform && glyphslot->format != ft_glyph_format_bitmap)
+ if(font->info.transform && glyphslot->format != FT_GLYPH_FORMAT_BITMAP)
{
/*
* calculate the true width by transforming all four corners.
@@ -260,17 +532,14 @@ XftFontLoadGlyphs (Display *dpy,
}
}
- if (font->info.antialias)
- pitch = (width * hmul + 3) & ~3;
- else
- pitch = ((width + 31) & ~31) >> 3;
-
- size = pitch * height * vmul;
+ if ( glyphslot->format != FT_GLYPH_FORMAT_BITMAP )
+ {
+ error = FT_Render_Glyph( face->glyph, mode );
+ if (error)
+ continue;
+ }
- xftg->metrics.width = width;
- xftg->metrics.height = height;
- xftg->metrics.x = -TRUNC(left);
- xftg->metrics.y = TRUNC(top);
+ FT_Library_SetLcdFilter( _XftFTlibrary, FT_LCD_FILTER_NONE );
if (font->info.spacing >= FC_MONO)
{
@@ -310,103 +579,13 @@ XftFontLoadGlyphs (Display *dpy,
xftg->metrics.yOff = -TRUNC(ROUND(glyphslot->advance.y));
}
- /*
- * If the glyph is relatively large (> 1% of server memory),
- * don't send it until necessary
- */
- if (!need_bitmaps && size > info->max_glyph_memory / 100)
- continue;
- /*
- * Make sure there's enough buffer space for the glyph
- */
- if (size > bufSize)
- {
- if (bufBitmap != bufLocal)
- free (bufBitmap);
- bufBitmap = (unsigned char *) malloc (size);
- if (!bufBitmap)
- continue;
- bufSize = size;
- }
- memset (bufBitmap, 0, size);
-
- /*
- * Rasterize into the local buffer
- */
- switch (glyphslot->format) {
- case ft_glyph_format_outline:
- ftbit.width = width * hmul;
- ftbit.rows = height * vmul;
- ftbit.pitch = pitch;
- if (font->info.antialias)
- ftbit.pixel_mode = ft_pixel_mode_grays;
- else
- ftbit.pixel_mode = ft_pixel_mode_mono;
-
- ftbit.buffer = bufBitmap;
-
- if (subpixel)
- FT_Outline_Transform (&glyphslot->outline, &matrix);
-
- FT_Outline_Translate ( &glyphslot->outline, -left*hmul, -bottom*vmul );
+ // compute the size of the final bitmap
+ ftbit = &glyphslot->bitmap;
- FT_Outline_Get_Bitmap( _XftFTlibrary, &glyphslot->outline, &ftbit );
- break;
- case ft_glyph_format_bitmap:
- if (font->info.antialias)
- {
- unsigned char *srcLine, *dstLine;
- int height;
- int x;
- int h, v;
-
- srcLine = glyphslot->bitmap.buffer;
- dstLine = bufBitmap;
- height = glyphslot->bitmap.rows;
- while (height--)
- {
- for (x = 0; x < glyphslot->bitmap.width; x++)
- {
- /* always MSB bitmaps */
- unsigned char a = ((srcLine[x >> 3] & (0x80 >> (x & 7))) ?
- 0xff : 0x00);
- if (subpixel)
- {
- for (v = 0; v < vmul; v++)
- for (h = 0; h < hmul; h++)
- dstLine[v * pitch + x*hmul + h] = a;
- }
- else
- dstLine[x] = a;
- }
- dstLine += pitch * vmul;
- srcLine += glyphslot->bitmap.pitch;
- }
- }
- else
- {
- unsigned char *srcLine, *dstLine;
- int h, bytes;
-
- srcLine = glyphslot->bitmap.buffer;
- dstLine = bufBitmap;
- h = glyphslot->bitmap.rows;
- bytes = (glyphslot->bitmap.width + 7) >> 3;
- while (h--)
- {
- memcpy (dstLine, srcLine, bytes);
- dstLine += pitch;
- srcLine += glyphslot->bitmap.pitch;
- }
- }
- break;
- default:
- if (XftDebug() & XFT_DBG_GLYPH)
- printf ("glyph %d is not in a usable format\n",
- (int) glyphindex);
- continue;
- }
+ width = ftbit->width;
+ height = ftbit->rows;
+ pitch = (width+3) & ~3;
if (XftDebug() & XFT_DBG_GLYPH)
{
@@ -423,29 +602,72 @@ XftFontLoadGlyphs (Display *dpy,
int x, y;
unsigned char *line;
- line = bufBitmap;
- for (y = 0; y < height * vmul; y++)
+ line = ftbit->buffer;
+
+ if (ftbit->pitch < 0)
+ line -= ftbit->pitch*(height-1);
+
+ for (y = 0; y < height; y++)
{
if (font->info.antialias)
{
- static char den[] = { " .:;=+*#" };
- for (x = 0; x < pitch; x++)
+ static const char den[] = { " .:;=+*#" };
+ for (x = 0; x < width; x++)
printf ("%c", den[line[x] >> 5]);
}
else
{
- for (x = 0; x < pitch * 8; x++)
+ for (x = 0; x < width * 8; x++)
{
printf ("%c", line[x>>3] & (1 << (x & 7)) ? '#' : ' ');
}
}
printf ("|\n");
- line += pitch;
+ line += ftbit->pitch;
}
printf ("\n");
}
}
+ size = _compute_xrender_bitmap_size( &local, glyphslot, mode );
+ if ( size < 0 )
+ continue;
+
+ xftg->metrics.width = local.width;
+ xftg->metrics.height = local.rows;
+ xftg->metrics.x = - glyphslot->bitmap_left;
+ xftg->metrics.y = glyphslot->bitmap_top;
+
+ /*
+ * If the glyph is relatively large (> 1% of server memory),
+ * don't send it until necessary
+ */
+ if (!need_bitmaps && size > info->max_glyph_memory / 100)
+ continue;
+
+ /*
+ * Make sure there's enough buffer space for the glyph
+ */
+ if (size > bufSize)
+ {
+ if (bufBitmap != bufLocal)
+ free (bufBitmap);
+ bufBitmap = (unsigned char *) malloc (size);
+ if (!bufBitmap)
+ continue;
+ bufSize = size;
+ }
+ memset (bufBitmap, 0, size);
+
+ local.buffer = bufBitmap;
+
+ _fill_xrender_bitmap( &local, glyphslot, mode,
+ (font->info.rgba == FC_RGBA_BGR ||
+ font->info.rgba == FC_RGBA_VBGR ) );
+ /*
+ * Copy or convert into local buffer
+ */
+
/*
* Use the glyph index as the wire encoding; it
* might be more efficient for some locales to map
@@ -455,130 +677,33 @@ XftFontLoadGlyphs (Display *dpy,
*/
glyph = (Glyph) glyphindex;
- if (subpixel)
- {
- int x, y;
- unsigned char *in_line, *out_line, *in;
- unsigned int *out;
- unsigned int red, green, blue;
- int rf, gf, bf;
- int s;
- int o, os;
-
- /*
- * Filter the glyph to soften the color fringes
- */
- widthrgba = width;
- pitchrgba = (widthrgba * 4 + 3) & ~3;
- sizergba = pitchrgba * height;
-
- os = 1;
- switch (font->info.rgba) {
- case FC_RGBA_VRGB:
- os = pitch;
- case FC_RGBA_RGB:
- default:
- rf = 0;
- gf = 1;
- bf = 2;
- break;
- case FC_RGBA_VBGR:
- os = pitch;
- case FC_RGBA_BGR:
- bf = 0;
- gf = 1;
- rf = 2;
- break;
- }
- if (sizergba > bufSizeRgba)
- {
- if (bufBitmapRgba != bufLocalRgba)
- free (bufBitmapRgba);
- bufBitmapRgba = (unsigned char *) malloc (sizergba);
- if (!bufBitmapRgba)
- continue;
- bufSizeRgba = sizergba;
- }
- memset (bufBitmapRgba, 0, sizergba);
- in_line = bufBitmap;
- out_line = bufBitmapRgba;
- for (y = 0; y < height; y++)
- {
- in = in_line;
- out = (unsigned int *) out_line;
- in_line += pitch * vmul;
- out_line += pitchrgba;
- for (x = 0; x < width * hmul; x += hmul)
- {
- red = green = blue = 0;
- o = 0;
- for (s = 0; s < 3; s++)
- {
- red += filters[rf][s]*in[x+o];
- green += filters[gf][s]*in[x+o];
- blue += filters[bf][s]*in[x+o];
- o += os;
+ xftg->glyph_memory = size + sizeof (XftGlyph);
+
+ if (font->format) {
+ if (!font->glyphset)
+ font->glyphset = XRenderCreateGlyphSet (dpy, font->format);
+
+ if ( mode == FT_RENDER_MODE_MONO ) {
+ /* swap bits in each byte */
+ if (BitmapBitOrder (dpy) != MSBFirst) {
+ unsigned char *line = (unsigned char*)bufBitmap;
+ int i = size;
+
+ while (i--) {
+ int c = *line;
+ c = ((c << 1) & 0xaa) | ((c >> 1) & 0x55);
+ c = ((c << 2) & 0xcc) | ((c >> 2) & 0x33);
+ c = ((c << 4) & 0xf0) | ((c >> 4) & 0x0f);
+ *line++ = c;
}
- red = red / 65536;
- green = green / 65536;
- blue = blue / 65536;
- *out++ = (green << 24) | (red << 16) | (green << 8) | blue;
- }
- }
-
- xftg->glyph_memory = sizergba + sizeof (XftGlyph);
- if (font->format)
- {
- if (!font->glyphset)
- font->glyphset = XRenderCreateGlyphSet (dpy, font->format);
- if (ImageByteOrder (dpy) != XftNativeByteOrder ())
- XftSwapCARD32 ((CARD32 *) bufBitmapRgba, sizergba >> 2);
- XRenderAddGlyphs (dpy, font->glyphset, &glyph,
- &xftg->metrics, 1,
- (char *) bufBitmapRgba, sizergba);
- }
- else
- {
- if (sizergba)
- {
- xftg->bitmap = malloc (sizergba);
- if (xftg->bitmap)
- memcpy (xftg->bitmap, bufBitmapRgba, sizergba);
}
- else
- xftg->bitmap = NULL;
}
- }
- else
- {
- xftg->glyph_memory = size + sizeof (XftGlyph);
- if (font->format)
- {
- /*
- * swap bit order around; FreeType is always MSBFirst
- */
- if (!font->info.antialias)
- {
- if (BitmapBitOrder (dpy) != MSBFirst)
- {
- unsigned char *line;
- unsigned char c;
- int i;
-
- line = (unsigned char *) bufBitmap;
- i = size;
- while (i--)
- {
- c = *line;
- c = ((c << 1) & 0xaa) | ((c >> 1) & 0x55);
- c = ((c << 2) & 0xcc) | ((c >> 2) & 0x33);
- c = ((c << 4) & 0xf0) | ((c >> 4) & 0x0f);
- *line++ = c;
- }
- }
- }
- if (!font->glyphset)
- font->glyphset = XRenderCreateGlyphSet (dpy, font->format);
+ else if ( mode != FT_RENDER_MODE_NORMAL )
+ {
+ /* invert ARGB <=> BGRA */
+ if (ImageByteOrder (dpy) != XftNativeByteOrder ())
+ XftSwapCARD32 ((CARD32 *) bufBitmap, size >> 2);
+ }
XRenderAddGlyphs (dpy, font->glyphset, &glyph,
&xftg->metrics, 1,
(char *) bufBitmap, size);
@@ -594,7 +719,7 @@ XftFontLoadGlyphs (Display *dpy,
else
xftg->bitmap = NULL;
}
- }
+
font->glyph_memory += xftg->glyph_memory;
info->glyph_memory += xftg->glyph_memory;
if (XftDebug() & XFT_DBG_CACHE)
@@ -605,8 +730,6 @@ XftFontLoadGlyphs (Display *dpy,
}
if (bufBitmap != bufLocal)
free (bufBitmap);
- if (bufBitmapRgba != bufLocalRgba)
- free (bufBitmapRgba);
XftUnlockFace (&font->public);
}

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c8685ae56da0c1dcc2bc1e34607e7d76ae98b86a1a71baba3a6b76dbcf5ff9b2
size 290451

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:bbe2b4a0e8ccf01a40f02c429c8418bd1fe652fd2c6f05d487e1319599d6779f
size 266086

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8349266b3cc8cf743a02e810d67ad500fbd1bdfd5188470d19f4bf97663510f4
size 202104

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:62bba708649c04cbbc2f5de910942a01cc727b27225bc06169af8a89b957c661
size 285632

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a00b0f464bc0c038db5614513b0e33475db22a7b3cd41e4e56a6c661a518a059
size 240062

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7a2e0912b521f6bd8c392189874ba4a3b8168b0bba4c2143e073de53d8e85408
size 281922

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3dda80e9c71fd14a14f93279c6f661703c5c1c43d104a5db0842377bdf0c3392
size 270013

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1ba652f562ce3fb3fef092ce5485eb7ef15b521124c901977b56d6f324605a06
size 270013

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:563f4200862efd3334c33a669e0a0aae5bab31f3998db75b87a99a697cc26b5b
size 255831

View File

@ -1,49 +0,0 @@
Index: src/XF86Misc.c
===================================================================
--- src/XF86Misc.c.orig
+++ src/XF86Misc.c
@@ -154,6 +154,8 @@ Bool XF86MiscGetMouseSettings(dpy, mouse
if (!(mouseinfo->device = Xcalloc(rep.devnamelen + 1, 1))) {
_XEatData(dpy, (rep.devnamelen+3) & ~3);
Xfree(mouseinfo->device);
+ UnlockDisplay(dpy);
+ SyncHandle();
return False;
}
_XReadPad(dpy, mouseinfo->device, rep.devnamelen);
@@ -308,6 +310,8 @@ Bool XF86MiscGetFilePaths(dpy, filpaths)
if (!(filpaths->configfile = Xcalloc(rep.configlen + 1, 1))) {
_XEatData(dpy, ((rep.configlen+3) & ~3) + ((rep.modulelen+3) & ~3)
+ ((rep.loglen+3) & ~3));
+ UnlockDisplay(dpy);
+ SyncHandle();
return False;
}
}
@@ -318,6 +322,8 @@ Bool XF86MiscGetFilePaths(dpy, filpaths)
+ ((rep.loglen+3) & ~3));
if (filpaths->configfile)
Xfree(filpaths->configfile);
+ UnlockDisplay(dpy);
+ SyncHandle();
return False;
}
}
@@ -330,6 +336,8 @@ Bool XF86MiscGetFilePaths(dpy, filpaths)
Xfree(filpaths->configfile);
if (filpaths->modulepath)
Xfree(filpaths->modulepath);
+ UnlockDisplay(dpy);
+ SyncHandle();
return False;
}
}
@@ -394,6 +402,8 @@ Status XF86MiscPassMessage(dpy, screen,
if (rep.mesglen) {
if (!(*retmsg = Xcalloc(rep.mesglen + 1, 1))) {
_XEatData(dpy, ((rep.mesglen+3) & ~3));
+ UnlockDisplay(dpy);
+ SyncHandle();
return BadAlloc;
}
_XReadPad(dpy, *retmsg, rep.mesglen);

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:21cae9239aefd59353a4ddb0d6ed890402b681570ccd4bc977d80a75a020239e
size 252404

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a6de6e87470bc749de02056fa38758d0e633303789830fdafc56600e75b3de18
size 265460

BIN
liblbxutil-1.1.0.tar.bz2 (Stored with Git LFS)

Binary file not shown.

BIN
liboldX-X11R7.0-1.0.1.tar.bz2 (Stored with Git LFS)

Binary file not shown.

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f49bc388668b3eca059f4edc12ca82b3c8a374e472703e53db3f9536ad6b1c9a
size 4647

BIN
libxkbui-X11R7.1-1.0.2.tar.bz2 (Stored with Git LFS)

Binary file not shown.

View File

@ -1,13 +0,0 @@
Index: src/XKBui.c
===================================================================
--- src/XKBui.c.orig
+++ src/XKBui.c
@@ -104,7 +104,7 @@ XkbDescPtr xkb;
char buf[20];
sprintf(buf,"#%02x%02x%02x",(sdef.red>>8)&0xff,
(sdef.green>>8)&0xff,
- (sdef.blue>>8)&&0xff);
+ (sdef.blue>>8)&0xff);
if (XAllocNamedColor(view->dpy,view->opts.cmap,buf,&sdef,&xdef)) {
xkb->geom->colors[i].pixel= sdef.pixel;
#ifdef DEBUG

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3671b034356bbc4d32d052808cf646c940ec8b2d1913adac51b1453e41aa1e9d
size 113346

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c1eed9284750bc09352e60654df77bb585dbbe7673fdcc675e58b7f3a0b447b9
size 266339

View File

@ -1,3 +1,14 @@
-------------------------------------------------------------------
Thu Apr 19 10:05:33 UTC 2012 - vuntz@opensuse.org
- Remove all tarballs and patches, since they're not used anymore
with the split packages.
- Stop making xorg-x11-devel have a Requires on xorg-x11-libs: both
are metapackages, so it's useless.
- Add a README.meta file to explain the goal of the compatibility
metapackages, and update their summaries and descriptions as
well.
-------------------------------------------------------------------
Fri Feb 24 10:33:03 UTC 2012 - sndirsch@suse.com

View File

@ -16,106 +16,28 @@
#
%define meta 1
Name: xorg-x11-libs
BuildRequires: fdupes
BuildRequires: fontconfig-devel
BuildRequires: freetype2-devel
BuildRequires: gperf
BuildRequires: libXi6-devel
BuildRequires: libexpat-devel
BuildRequires: libtool
BuildRequires: libxslt
BuildRequires: pkgconfig
BuildRequires: xorg-x11-libICE-devel
BuildRequires: xorg-x11-libSM-devel
BuildRequires: xorg-x11-libX11-devel
BuildRequires: xorg-x11-libXau-devel
BuildRequires: xorg-x11-libXdmcp-devel
BuildRequires: xorg-x11-libXext-devel
BuildRequires: xorg-x11-libXfixes-devel
BuildRequires: xorg-x11-libXmu-devel
BuildRequires: xorg-x11-libXp-devel
BuildRequires: xorg-x11-libXpm-devel
BuildRequires: xorg-x11-libXprintUtil-devel
BuildRequires: xorg-x11-libXrender-devel
BuildRequires: xorg-x11-libXt-devel
BuildRequires: xorg-x11-libXv-devel
BuildRequires: xorg-x11-libfontenc-devel
BuildRequires: xorg-x11-libxkbfile-devel
BuildRequires: xorg-x11-proto-devel
BuildRequires: xorg-x11-util-devel
BuildRequires: xorg-x11-xtrans-devel
%if !%{meta}
%ifarch ppc64 s390x x86_64
Provides: libXaw.so.6()(64bit)
Provides: libXaw.so.7()(64bit)
Provides: libXaw.so.8()(64bit)
Provides: libXaw6.so.6()(64bit)
Provides: libXaw7.so.7()(64bit)
Provides: libXaw8.so.8()(64bit)
%else
Provides: libXaw.so.6
Provides: libXaw.so.7
Provides: libXaw.so.8
Provides: libXaw6.so.6
Provides: libXaw7.so.7
Provides: libXaw8.so.8
%endif
%endif
Version: 7.6
Release: 0
Summary: Compatibility metapackage for X.Org libraries
License: GPL-2.0+ ; MIT
Group: System/Libraries
Url: http://xorg.freedesktop.org/
Source0: README.meta
# bug437293
%ifarch ppc64
Obsoletes: xorg-x11-libs-64bit
%endif
#
Url: http://xorg.freedesktop.org/
Version: 7.6
Release: 0
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Summary: Remaining X.Org libraries
License: GPL-2.0+ ; MIT
Group: System/Libraries
Source1: libFS-1.0.3.tar.bz2
Source2: libWindowsWM-1.0.1.tar.bz2
Source3: libXScrnSaver-1.2.1.tar.bz2
Source4: libXTrap-X11R7.0-1.0.0.tar.bz2
Source5: libXaw-1.0.8.tar.bz2
Source6: libXcomposite-0.4.3.tar.bz2
Source7: libXcursor-1.1.11.tar.bz2
Source8: libXdamage-1.1.3.tar.bz2
Source9: libXevie-1.0.3.tar.bz2
Source10: libXfont-1.4.3.tar.bz2
Source11: libXfontcache-1.0.5.tar.bz2
Source12: libXft-2.2.0.tar.bz2
Source14: libXinerama-1.1.1.tar.bz2
Source15: libXprintAppUtil-X11R7.0-1.0.1.tar.bz2
Source16: libXrandr-1.3.1.tar.bz2
Source17: libXtst-1.2.0.tar.bz2
Source18: libXvMC-1.0.6.tar.bz2
Source19: libXxf86dga-1.1.2.tar.bz2
Source20: libXxf86misc-1.0.3.tar.bz2
Source21: libXxf86vm-1.1.1.tar.bz2
Source22: libdmx-1.1.1.tar.bz2
Source23: liblbxutil-1.1.0.tar.bz2
Source24: liboldX-X11R7.0-1.0.1.tar.bz2
Source25: libxkbui-X11R7.1-1.0.2.tar.bz2
Source26: xbitmaps-1.1.1.tar.bz2
Source27: libXres-1.0.5.tar.bz2
Source29: libvnc-20070501.tar.bz2
Source30: libXcliplist-20070501.tar.bz2
Source31: xcb-util-0.3.8.tar.bz2
Source90: baselibs.conf
Patch2: libXft-2.1.7-lcd-filter-2.patch
Patch5: libxkbui.diff
Patch10: libXxf86misc-xcb.diff
Patch11: U_libXfont_LZW-decompress-fix-for-CVE-2011-2895.patch
BuildArch: noarch
%description
This package contains the remaining X.Org libraries.
This package is a compatibility metapackage. It used to contain the
X.Org libraries.
%package -n xorg-x11-devel
Summary: Include Files and Libraries mandatory for X11 Development
Summary: Compatibility metapackage for X.Org development libraries
Group: Development/Libraries/X11
Provides: XFree86-devel
Provides: xorg-x11-compat70-devel
@ -126,7 +48,6 @@ Obsoletes: xorg-x11-man
%ifarch ppc64
Obsoletes: xorg-x11-devel-64bit
%endif
Requires: %{name} = %{version}
Requires: Mesa-libEGL-devel
Requires: Mesa-libGL-devel
Requires: fontconfig-devel
@ -194,121 +115,23 @@ Requires: xorg-x11-util-devel
Requires: xorg-x11-xtrans-devel
%description -n xorg-x11-devel
This package contains all necessary include files and libraries needed
to develop X11 applications that require these.
This package is a compatibility metapackage. It used to contain the
X.Org development libraries.
%prep
%setup -q -T -c %{name}
%if !%{meta}
for i in $RPM_SOURCE_DIR/*.tar.bz2; do tar xjf $i; done
pushd libXft-*/src
%patch2 -p1
popd
pushd libxkbui-*
%patch5
popd
pushd libXxf86misc-*
%patch10 -p0
popd
pushd libXfont-*
%patch11 -p1
popd
%else
touch meta
%endif
%setup -T -c
cp %{SOURCE0} .
%build
%if !%{meta}
for dir in $(ls); do
pushd $dir
case $dir in
libXvMC-*) option="--sysconfdir=/etc" ;;
libvnc*|libXcliplist*) autoreconf -fi ;;
*) ;;
esac
autoreconf -fiv
export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
%configure --disable-silent-rules \
--disable-static \
--with-pic --enable-type1 ${option}
%{__make} %{?_smp_mflags}
popd
done
%endif
%install
%if !%{meta}
for dir in $(ls); do
pushd $dir
make install DESTDIR=$RPM_BUILD_ROOT
popd
done
/sbin/ldconfig -n $RPM_BUILD_ROOT/usr/%_lib
mkdir -p $RPM_BUILD_ROOT/usr/include/X11/pixmaps/
%if %suse_version > 1110
rm -f $RPM_BUILD_ROOT/%{_libdir}/*.la
%endif
# for compatibility reasons
ln -s libXaw7.so.7 $RPM_BUILD_ROOT/%{_libdir}/libXaw8.so.8
ln -s libXaw.so.7 $RPM_BUILD_ROOT/%{_libdir}/libXaw.so.8
# create fake libxcb-* libs being replaced now by libxcb-util (bnc #741465
# and reported by others)
for ext_version in atom:1 aux:0 event:1 icccm:1 image:0 keysyms:1 property:1 render-util:0 reply:1; do
ext=${ext_version%:*}
version=${ext_version#*:}
> xcb-${ext}.c
gcc -Wall -ansi -pedantic -c xcb-${ext}.c -fPIC
gcc -shared -Wl,-soname,libxcb-${ext}.so.${version} \
-Wl,-L$RPM_BUILD_ROOT%{_libdir},--no-as-needed,-lxcb-util \
-o $RPM_BUILD_ROOT%{_libdir}/libxcb-${ext}.so.${version} xcb-${ext}.o
done
%if %suse_version > 1110
%{__rm} -f %{buildroot}%{_libdir}/*.la
%endif
%fdupes -s $RPM_BUILD_ROOT/%_mandir
%endif
%clean
rm -rf "$RPM_BUILD_ROOT"
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%files
%defattr(-,root,root)
%if %{meta}
%doc meta
%else
/usr/include/X11/bitmaps/
/usr/include/X11/pixmaps/
/usr/%{_lib}/*.so.*
%endif
%doc README.meta
%files -n xorg-x11-devel
%defattr(-,root,root)
%if %{meta}
%doc meta
%else
%doc /usr/share/doc/*
/usr/include/X11/*.h
/usr/include/X11/Xaw/
/usr/include/X11/Xcursor/
/usr/include/X11/Xft/
/usr/include/X11/XprintAppUtil/
/usr/include/X11/extensions/*.h
/usr/include/X11/fonts/*.h
/usr/include/xcb/
/usr/%{_lib}/*.so
%if %suse_version <= 1110
/usr/%{_lib}/*.la
%endif
/usr/%{_lib}/pkgconfig/*.pc
%{_datadir}/pkgconfig/*.pc
%{_mandir}/man3/*
%doc %{_datadir}/doc/libXvMC/
%doc %{_datadir}/doc/libXaw/
%doc %{_datadir}/doc/libFS/
%endif
%doc README.meta
%changelog