diff -urN cairo-0.9.2.orig/src/cairo-cache.c cairo-0.9.2/src/cairo-cache.c --- cairo-0.9.2.orig/src/cairo-cache.c 2005-08-17 18:28:20.765530192 +0200 +++ cairo-0.9.2/src/cairo-cache.c 2005-08-17 18:29:26.158588936 +0200 @@ -512,7 +512,7 @@ { /* This is the djb2 hash. */ unsigned long hash = 5381; - while (*c) + while (c && *c) hash = ((hash << 5) + hash) + *c++; return hash; } diff -urN cairo-0.9.2.orig/src/cairo-ft-font.c cairo-0.9.2/src/cairo-ft-font.c --- cairo-0.9.2.orig/src/cairo-ft-font.c 2005-08-17 18:28:20.816522440 +0200 +++ cairo-0.9.2/src/cairo-ft-font.c 2005-08-17 18:33:08.097849040 +0200 @@ -248,8 +248,8 @@ static void _cairo_ft_unscaled_font_init_key (cairo_ft_unscaled_font_t *key, - char *filename, - int id) + char *filename, + int id) { unsigned long hash; @@ -290,22 +290,25 @@ int id, FT_Face face) { - char *filename_copy = NULL; - - if (filename) { - filename_copy = strdup (filename); - if (filename_copy == NULL) - return CAIRO_STATUS_NO_MEMORY; - } - - _cairo_ft_unscaled_font_init_key (unscaled, filename_copy, id); + _cairo_unscaled_font_init (&unscaled->base, + &cairo_ft_unscaled_font_backend); if (face) { - unscaled->from_face = 1; + unscaled->from_face = TRUE; unscaled->face = face; + unscaled->filename = NULL; + unscaled->id = 0; } else { - unscaled->from_face = 0; + char *filename_copy; + + unscaled->from_face = FALSE; unscaled->face = NULL; + + filename_copy = strdup (filename); + if (filename_copy == NULL) + return CAIRO_STATUS_NO_MEMORY; + + _cairo_ft_unscaled_font_init_key (unscaled, filename_copy, id); } unscaled->have_scale = 0; @@ -313,9 +316,6 @@ unscaled->faces = NULL; - _cairo_unscaled_font_init (&unscaled->base, - &cairo_ft_unscaled_font_backend); - return CAIRO_STATUS_SUCCESS; }