Bug 1285942 Part 2: Check result of CreateGlyphRunAnalysis in _cairo_dwrite_scaled_show_glyphs. draft
authorBob Owen <bobowencode@gmail.com>
Mon, 18 Jul 2016 12:13:18 +0100
changeset 388957 5d58b6e98428fafa68cb5d976d103dbc78f66f00
parent 388956 64f7c97a051e63e9ec32deb83262f7c20f4a6808
child 525635 9998436461e59ea727295aae8f33fba50d8e6c52
push id23276
push userbobowencode@gmail.com
push dateMon, 18 Jul 2016 11:13:40 +0000
bugs1285942
milestone50.0a1
Bug 1285942 Part 2: Check result of CreateGlyphRunAnalysis in _cairo_dwrite_scaled_show_glyphs. MozReview-Commit-ID: 8D3HE5O1ZrJ
gfx/cairo/cairo/src/cairo-dwrite-font.cpp
--- 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];