[PATCH] Fix crash when all glyphs of a given depth are freed, but not all glyphsets
Michel Dänzer
michel at daenzer.net
Tue Mar 23 06:00:09 PDT 2010
On Mon, 2010-03-22 at 15:20 -0400, Peter Harris wrote:
> 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.
>
> Signed-off-by: Peter Harris <pharris at opentext.com>
Looks like this could fix
http://bugs.freedesktop.org/show_bug.cgi?id=20718 . If so, please
reference the bug report in the commit message, resolve it when the fix
lands, and maybe nominate it for server-1.7-branch.
> ---
> render/glyph.c | 3 +++
> 1 files changed, 3 insertions(+), 0 deletions(-)
>
> 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);
>
--
Earthling Michel Dänzer | http://www.vmware.com
Libre software enthusiast | Debian, X and DRI developer
More information about the xorg-devel
mailing list