[WIN32SS][NTGDI] Improve IntGetOutlineTextMetrics (#1760)
authorKatayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
Fri, 2 Aug 2019 11:28:30 +0000 (20:28 +0900)
committerGitHub <noreply@github.com>
Fri, 2 Aug 2019 11:28:30 +0000 (20:28 +0900)
Improve size checking of IntGetOutlineTextMetrics function.

win32ss/gdi/ntgdi/freetype.c

index 37ff3fb..d31178d 100644 (file)
@@ -2304,22 +2304,30 @@ IntGetOutlineTextMetrics(PFONTGDI FontGDI,
         Cache = &SharedFace->UserLanguage;
     }
 
-    if (Cache->OutlineRequiredSize && Size < Cache->OutlineRequiredSize)
+    if (Size == 0 && Cache->OutlineRequiredSize > 0)
     {
+        ASSERT(Otm == NULL);
         return Cache->OutlineRequiredSize;
     }
 
     IntInitFontNames(&FontNames, SharedFace);
+    Cache->OutlineRequiredSize = FontNames.OtmSize;
 
-    if (!Cache->OutlineRequiredSize)
+    if (Size == 0)
     {
-        Cache->OutlineRequiredSize = FontNames.OtmSize;
+        ASSERT(Otm == NULL);
+        IntFreeFontNames(&FontNames);
+        return Cache->OutlineRequiredSize;
     }
 
+    ASSERT(Otm != NULL);
+
     if (Size < Cache->OutlineRequiredSize)
     {
+        DPRINT1("Size %u < OutlineRequiredSize %u\n", Size,
+                Cache->OutlineRequiredSize);
         IntFreeFontNames(&FontNames);
-        return Cache->OutlineRequiredSize;
+        return 0;   /* failure */
     }
 
     XScale = Face->size->metrics.x_scale;