From 5d19002eb73e4510fdf19b6ce7c3e49e271e6b0e Mon Sep 17 00:00:00 2001
From: Alexis Cruz-Ayala <alexisdavidc@google.com>
Date: Wed, 17 Jun 2026 06:04:26 -0700
Subject: [PATCH] Add error handling and initialization to the DWFM

Within SkScalerContext_DW::generateFontMetrics(), the `dwfm` variable does not get initialized, and if GetGDICompatibleMetrics() fails, then it could remain uninitialized.

This CL null initializes dwfm and checks the return value of GetGdiCompatibleMetrics.

Bug: https://issues.chromium.org/issues/520506316
Change-Id: Ia47343587e2615332fd1b7181a80ecae32328657
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/1267726
Commit-Queue: Alexis Cruz-Ayala <alexisdavidc@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
---
 src/ports/SkScalerContext_win_dw.cpp | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/src/ports/SkScalerContext_win_dw.cpp b/src/ports/SkScalerContext_win_dw.cpp
index ffd1d0beee..d0d1b8f95d 100644
--- a/src/ports/SkScalerContext_win_dw.cpp
+++ b/src/ports/SkScalerContext_win_dw.cpp
@@ -1853,15 +1853,14 @@ void SkScalerContext_DW::generateFontMetrics(SkFontMetrics* metrics) {
     sk_bzero(metrics, sizeof(*metrics));
 
     IDWriteFontFace* fontFace = this->getDWriteTypeface()->fDWriteFontFace.get();
-    DWRITE_FONT_METRICS dwfm;
+    DWRITE_FONT_METRICS dwfm = {};
     if (DWRITE_MEASURING_MODE_GDI_CLASSIC == fMeasuringMode ||
-        DWRITE_MEASURING_MODE_GDI_NATURAL == fMeasuringMode)
-    {
-        fontFace->GetGdiCompatibleMetrics(
-             fTextSizeRender,
-             1.0f, // pixelsPerDip
-             &fXform,
-             &dwfm);
+        DWRITE_MEASURING_MODE_GDI_NATURAL == fMeasuringMode) {
+        HRVM(fontFace->GetGdiCompatibleMetrics(fTextSizeRender,
+                                               1.0f,  // pixelsPerDip
+                                               &fXform,
+                                               &dwfm),
+             "Could not initialize DWFM with GDI Compatible Metrics.");
     } else {
         fontFace->GetMetrics(&dwfm);
     }
-- 
2.53.0

