[PATCH] gdi32: Avoid awkward cast in GetGlyphOutlineA (Coverity)

Alex Henrie alexhenrie24 at gmail.com
Fri Jun 1 00:03:35 CDT 2018


Signed-off-by: Alex Henrie <alexhenrie24 at gmail.com>
---
CID 713109 (#1 of 1): Reliance on integer endianness (INCOMPATIBLE_CAST)

incompatible_cast: Pointer &uChar points to an object whose effective
type is unsigned int (32 bits, unsigned) but is dereferenced as a
narrower unsigned short (16 bits, unsigned). This may lead to unexpected
results depending on machine endianness.

 dlls/gdi32/font.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c
index 17b160d2dc..3347c9208c 100644
--- a/dlls/gdi32/font.c
+++ b/dlls/gdi32/font.c
@@ -2817,6 +2817,8 @@ DWORD WINAPI GetGlyphOutlineA( HDC hdc, UINT uChar, UINT fuFormat,
                                  LPGLYPHMETRICS lpgm, DWORD cbBuffer,
                                  LPVOID lpBuffer, const MAT2 *lpmat2 )
 {
+    WCHAR wChar;
+
     if (!lpmat2) return GDI_ERROR;
 
     if(!(fuFormat & GGO_GLYPH_INDEX)) {
@@ -2833,8 +2835,9 @@ DWORD WINAPI GetGlyphOutlineA( HDC hdc, UINT uChar, UINT fuFormat,
             len = 1;
             mbchs[0] = (uChar & 0xff);
         }
-        uChar = 0;
-        MultiByteToWideChar(cp, 0, mbchs, len, (LPWSTR)&uChar, 1);
+        wChar = 0;
+        MultiByteToWideChar(cp, 0, mbchs, len, &wChar, 1);
+        uChar = wChar;
     }
 
     return GetGlyphOutlineW(hdc, uChar, fuFormat, lpgm, cbBuffer, lpBuffer,
-- 
2.17.0




More information about the wine-devel mailing list