[Commit] cairo/src cairo_font.c, 1.8, 1.9 cairo_gstate.c, 1.17,
1.18 cairoint.h, 1.25, 1.26
Carl Worth
commit at keithp.com
Wed Oct 1 18:34:22 PDT 2003
Committed by: cworth
Update of /local/src/CVS/cairo/src
In directory home.keithp.com:/tmp/cvs-serv31662/src
Modified Files:
cairo_font.c cairo_gstate.c cairoint.h
Log Message:
Fix to gracefully handle a NULL pointer for gstate->font
Index: cairo_font.c
===================================================================
RCS file: /local/src/CVS/cairo/src/cairo_font.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- cairo_font.c 1 Oct 2003 01:56:22 -0000 1.8
+++ cairo_font.c 2 Oct 2003 00:34:19 -0000 1.9
@@ -27,18 +27,26 @@
#include "cairoint.h"
-void
+cairo_int_status_t
_cairo_font_init (cairo_font_t *font, const struct cairo_font_backend *backend)
{
+ if (font == NULL)
+ return CAIRO_INT_STATUS_NULL_POINTER;
+
font->key = (unsigned char *) strdup (CAIRO_FONT_KEY_DEFAULT);
cairo_matrix_set_identity (&font->matrix);
font->backend = backend;
+
+ return CAIRO_STATUS_SUCCESS;
}
-cairo_status_t
+cairo_int_status_t
_cairo_font_init_copy (cairo_font_t *font, cairo_font_t *other)
{
+ if (other == NULL)
+ return CAIRO_INT_STATUS_NULL_POINTER;
+
if (other->key) {
font->key = (unsigned char *) strdup ((char *) other->key);
if (font->key == NULL)
@@ -54,8 +62,8 @@
cairo_font_t *
_cairo_font_copy (cairo_font_t *font)
{
- if (!font->backend->copy)
- return 0;
+ if (font == NULL || font->backend->copy == NULL)
+ return NULL;
return font->backend->copy (font);
}
@@ -63,6 +71,9 @@
void
_cairo_font_fini (cairo_font_t *font)
{
+ if (font == NULL)
+ return;
+
if (font->key)
free (font->key);
font->key = NULL;
@@ -73,9 +84,12 @@
font->backend->close (font);
}
-cairo_status_t
+cairo_int_status_t
_cairo_font_select (cairo_font_t *font, const char *key)
{
+ if (font == NULL)
+ return CAIRO_INT_STATUS_NULL_POINTER;
+
if (font->backend->close)
font->backend->close (font);
@@ -89,28 +103,34 @@
return CAIRO_STATUS_SUCCESS;
}
-cairo_status_t
+cairo_int_status_t
_cairo_font_scale (cairo_font_t *font, double scale)
{
+ if (font == NULL)
+ return CAIRO_INT_STATUS_NULL_POINTER;
+
cairo_matrix_scale (&font->matrix, scale, scale);
return CAIRO_STATUS_SUCCESS;
}
-cairo_status_t
+cairo_int_status_t
_cairo_font_transform (cairo_font_t *font,
double a, double b,
double c, double d)
{
cairo_matrix_t m;
+ if (font == NULL)
+ return CAIRO_INT_STATUS_NULL_POINTER;
+
cairo_matrix_set_affine (&m, a, b, c, d, 0, 0);
cairo_matrix_multiply (&font->matrix, &m, &font->matrix);
return CAIRO_STATUS_SUCCESS;
}
-cairo_status_t
+cairo_int_status_t
_cairo_font_text_extents (cairo_font_t *font,
cairo_matrix_t *ctm,
const unsigned char *utf8,
@@ -118,13 +138,16 @@
double *width, double *height,
double *dx, double *dy)
{
+ if (font == NULL)
+ return CAIRO_INT_STATUS_NULL_POINTER;
+
if (!font->backend->text_extents)
return CAIRO_STATUS_SUCCESS;
return font->backend->text_extents (font, ctm, utf8, x, y, width, height, dx, dy);
}
-cairo_status_t
+cairo_int_status_t
_cairo_font_show_text (cairo_font_t *font,
cairo_matrix_t *ctm,
cairo_operator_t operator,
@@ -134,6 +157,9 @@
double y,
const unsigned char *utf8)
{
+ if (font == NULL)
+ return CAIRO_INT_STATUS_NULL_POINTER;
+
if (!font->backend->show_text)
return CAIRO_STATUS_SUCCESS;
Index: cairo_gstate.c
===================================================================
RCS file: /local/src/CVS/cairo/src/cairo_gstate.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- cairo_gstate.c 1 Oct 2003 01:56:22 -0000 1.17
+++ cairo_gstate.c 2 Oct 2003 00:34:19 -0000 1.18
@@ -120,11 +120,13 @@
return CAIRO_STATUS_NO_MEMORY;
memcpy (gstate->dash, other->dash, other->num_dashes * sizeof (double));
}
-
- gstate->font = _cairo_font_copy (other->font);
- if (!gstate->font) {
- status = CAIRO_STATUS_NO_MEMORY;
- goto CLEANUP_DASHES;
+
+ if (other->font) {
+ gstate->font = _cairo_font_copy (other->font);
+ if (!gstate->font) {
+ status = CAIRO_STATUS_NO_MEMORY;
+ goto CLEANUP_DASHES;
+ }
}
cairo_surface_reference (gstate->surface);
Index: cairoint.h
===================================================================
RCS file: /local/src/CVS/cairo/src/cairoint.h,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -d -r1.25 -r1.26
--- cairoint.h 1 Oct 2003 01:56:22 -0000 1.25
+++ cairoint.h 2 Oct 2003 00:34:20 -0000 1.26
@@ -128,7 +128,8 @@
from cairo_status_t. Oh well, without that, I'll use this bogus 1000
offset */
typedef enum cairo_int_status {
- CAIRO_INT_STATUS_DEGENERATE = 1000
+ CAIRO_INT_STATUS_DEGENERATE = 1000,
+ CAIRO_INT_STATUS_NULL_POINTER
} cairo_int_status_t;
typedef enum cairo_path_op {
@@ -673,10 +674,10 @@
_cairo_color_set_alpha (cairo_color_t *color, double alpha);
/* cairo_font.c */
-extern void __internal_linkage
+extern cairo_int_status_t __internal_linkage
_cairo_font_init (cairo_font_t *font, const struct cairo_font_backend *backend);
-extern cairo_status_t __internal_linkage
+extern cairo_int_status_t __internal_linkage
_cairo_font_init_copy (cairo_font_t *font, cairo_font_t *other);
extern cairo_font_t * __internal_linkage
@@ -685,18 +686,18 @@
extern void __internal_linkage
_cairo_font_fini (cairo_font_t *font);
-extern cairo_status_t __internal_linkage
+extern cairo_int_status_t __internal_linkage
_cairo_font_select (cairo_font_t *font, const char *key);
-extern cairo_status_t __internal_linkage
+extern cairo_int_status_t __internal_linkage
_cairo_font_scale (cairo_font_t *font, double scale);
-extern cairo_status_t __internal_linkage
+extern cairo_int_status_t __internal_linkage
_cairo_font_transform (cairo_font_t *font,
double a, double b,
double c, double d);
-extern cairo_status_t __internal_linkage
+extern cairo_int_status_t __internal_linkage
_cairo_font_text_extents (cairo_font_t *font,
cairo_matrix_t *ctm,
const unsigned char *utf8,
@@ -704,7 +705,7 @@
double *width, double *height,
double *dx, double *dy);
-extern cairo_status_t __internal_linkage
+extern cairo_int_status_t __internal_linkage
_cairo_font_show_text (cairo_font_t *font,
cairo_matrix_t *ctm,
cairo_operator_t operator,
More information about the Commit
mailing list