xserver: Branch 'master'

Keith Packard keithp at kemper.freedesktop.org
Wed Mar 24 05:04:02 PDT 2010


 render/glyph.c |    3 +++
 1 file changed, 3 insertions(+)

New commits:
commit 185185eeb44a277c324be0f58a4b4a469b56b69b
Author: Peter Harris <pharris at opentext.com>
Date:   Tue Mar 23 12:08:19 2010 -0400

    Fix crash when all glyphs of a given depth are freed, but not all glyphsets
    
    This is how the crash can be triggered with only two clients on the system:
    Client A: (already running)
    Client B: Connect
    Client B: CreateGlyphSet(depthN)
    Client A: Disconnect
    Server: free globalGlyphs(depthN)
    Client B: AddGlyphs(depthN)
    Server: SEGV
    
    This crash was introduced with the FindGlyphsByHash function
    in 516b96387b0e57b524a37a96da22dbeeeb041712. Before that revision,
    ResizeGlyphSet was always called before FindGlyphRef, which would
    re-create globalGlyphs(depthN) if necessary.
    
    X.Org Bug 20718 <http://bugs.freedesktop.org/show_bug.cgi?id=20718>
    
    Reviewed-by: Adam Jackson <ajax at redhat.com>
    Signed-off-by: Peter Harris <pharris at opentext.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/render/glyph.c b/render/glyph.c
index 0b864ad..f0f3b19 100644
--- a/render/glyph.c
+++ b/render/glyph.c
@@ -217,6 +217,9 @@ FindGlyphByHash (unsigned char sha1[20], int format)
     GlyphRefPtr gr;
     CARD32 signature = *(CARD32 *) sha1;
 
+    if (!globalGlyphs[format].hashSet)
+	return NULL;
+
     gr = FindGlyphRef (&globalGlyphs[format],
 		       signature, TRUE, sha1);
 


More information about the xorg-commit mailing list