summaryrefslogtreecommitdiff
path: root/src/cairo-scaled-font.c
diff options
context:
space:
mode:
authorFeysh INC <opensource@feysh.com>2022-04-22 17:09:47 +0800
committerFeysh INC <opensource@feysh.com>2022-04-22 17:09:47 +0800
commitfa8f456c2b7a061ca379a86931d5cc99b7edf42d (patch)
tree27a6bedc26de1e3507aacc411adffee14b205c60 /src/cairo-scaled-font.c
parent99cd4bb3bd51bc62a2c8b5f9f4b6eda7625f0b96 (diff)
downloadcairo-fa8f456c2b7a061ca379a86931d5cc99b7edf42d.tar.gz
Fix a use after free in cairo_scaled_font_create
When `font_face` is freed by `cairo_font_face_destroy()` at line 1,150, the following call `_cairo_font_face_set_error (font_face, status)` causes a use after free. We moved up the `_cairo_font_face_set_error (font_face, status)` before `cairo_font_face_destroy()` to avoid the use after free. Signed-off-by: Feysh INC <opensource@feysh.com>
Diffstat (limited to 'src/cairo-scaled-font.c')
-rwxr-xr-xsrc/cairo-scaled-font.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/cairo-scaled-font.c b/src/cairo-scaled-font.c
index 30611dca4..270f8ed34 100755
--- a/src/cairo-scaled-font.c
+++ b/src/cairo-scaled-font.c
@@ -1145,6 +1145,7 @@ cairo_scaled_font_create (cairo_font_face_t *font_face,
ctm, options, &scaled_font);
/* Did we leave the backend in an error state? */
if (unlikely (status)) {
+ status = _cairo_font_face_set_error (font_face, status);
_cairo_scaled_font_map_unlock ();
if (font_face != original_font_face)
cairo_font_face_destroy (font_face);
@@ -1152,7 +1153,6 @@ cairo_scaled_font_create (cairo_font_face_t *font_face,
if (dead != NULL)
cairo_scaled_font_destroy (dead);
- status = _cairo_font_face_set_error (font_face, status);
return _cairo_scaled_font_create_in_error (status);
}
/* Or did we encounter an error whilst constructing the scaled font? */