Bug 1285942 Part 2: Check result of CreateGlyphRunAnalysis in _cairo_dwrite_scaled_show_glyphs.
MozReview-Commit-ID: 8D3HE5O1ZrJ
--- a/gfx/cairo/cairo/src/cairo-dwrite-font.cpp
+++ b/gfx/cairo/cairo/src/cairo-dwrite-font.cpp
@@ -636,37 +636,42 @@ cairo_warn cairo_int_status_t
// and such, adjust positions by the inverse matrix now.
offsets[i].ascenderOffset = -(FLOAT)y;
offsets[i].advanceOffset = (FLOAT)x;
advances[i] = 0.0;
}
run.fontEmSize = 1.0f;
}
+ HRESULT hr;
if (!transform) {
- DWriteFactory::Instance()->CreateGlyphRunAnalysis(&run,
+ hr = DWriteFactory::Instance()->CreateGlyphRunAnalysis(&run,
1.0f,
NULL,
DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC,
DWRITE_MEASURING_MODE_NATURAL,
0,
0,
&analysis);
} else {
DWRITE_MATRIX dwmatrix = _cairo_dwrite_matrix_from_matrix(&dwritesf->mat);
- DWriteFactory::Instance()->CreateGlyphRunAnalysis(&run,
+ hr = DWriteFactory::Instance()->CreateGlyphRunAnalysis(&run,
1.0f,
&dwmatrix,
DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC,
DWRITE_MEASURING_MODE_NATURAL,
0,
0,
&analysis);
}
+ if (FAILED(hr) || !analysis) {
+ return CAIRO_INT_STATUS_UNSUPPORTED;
+ }
+
RECT r;
r.left = 0;
r.top = 0;
r.right = width;
r.bottom = height;
BYTE *surface = new BYTE[width * height * 3];