The offending font is NotoColorEmoji.ttf which is present in, e. g., google-noto-emoji-color-fonts or noto-fonts-emoji packages available in various distribution. Attempting to load this font on Windows 10 (with AddFontResourceA() or open it with default font viewer) fails while currently succeeds on Windows. fontforge also refuses to open this font. That is because the font is bitmap only but missing bitmap table.
Some apps (Glyph launcher is an example) try to GetOutlineTextMetrics() on this font and do not expect that to have an error return (as we currenly do), which leads to crash on unhandled division by zero exception.
I am attaching a bitmap-only ttf test font (with only one bitmap) which I created with fontforge to make sure that such font can still be loaded in Wine. This font also loads on Windows (both with AddFontResourceA() and with default font viewer).
There are other font types which can be legitimately missing EBDT table, but FT_Load_Sfnt_Table() returns a different error for those and my patch doesn't reject those fonts.
[test.ttf](/uploads/b41472180b80c2c53f9dcc06055990f0/test.ttf)
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/411
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=55075
Signed-off-by: Fabian Maurer <dark.shadow4(a)web.de>
--
v4: apisetschema: Add api-ms-win-core-com-l2-1-1
ole32: Move convert functions back from coml2
coml2: Remove temporary exports
ole32: Remove storage32.h
coml2: Move StgSetTimes from ole32
coml2: Move StgOpenStorageOnILockBytes from ole32
coml2: Move StgCreateDocfileOnILockBytes from ole32
coml2: Move StgOpenStorageEx from ole32
coml2: Move StgOpenStorage from ole32
coml2: Move storage interfaces from ole32
coml2: Move filelockbytes from ole32
coml2: Move IPropertyStorage implementation from ole32
ole32: Prepare for moving IPropertyStorage implementation
coml2: Move stream and block logic from ole32
coml2: Move stg_stream.c from ole32
coml2: Move IEnumSTATSTG from ole32
ole32: Refactor IEnumSTATSTGImpl_Construct to prepare for movement to coml2
coml2: Move StgCreatePropSetStg from ole32
coml2: Move StgIsStorageILockBytes from ole32
coml2: Move WriteClassStg from ole32
coml2: Move ReadClassStg from ole32
coml2: Move StgIsStorageFile from ole32
coml2: Move WriteClassStm from ole32
coml2: Move ReadClassStm from ole32
coml2: Move GetConvertStg from ole32
coml2: Add dll and move code from ole32/memlockbytes.c
This merge request has too many patches to be relayed via email.
Please visit the URL below to see the contents of the merge request.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3106
If explicit_handle is defined in the *.idl file, c/s are uses explicit handles,
then an explicit handle must be passed in to the server-side interface
Add a test for explicit_handle.
v3.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/4467
push_dc_driver() places drivers based on their priorities, so the newly created driver is not
necessary on top. Thus in windrv_CreateDC(), find_dc_driver() should be used to find the dib
driver instead of assuming the dib driver is the top driver, which could be the path driver because
it has a higher priority.
--
v3: win32u: Find the correct DIB driver in windrv_CreateDC().
https://gitlab.winehq.org/wine/wine/-/merge_requests/4374