[PATCH v6 1/2] gdi32: In AddFaceToList allow fonts with long names and add tests

Huw Davies huw at codeweavers.com
Mon Nov 27 05:00:10 CST 2017


On Sun, Nov 26, 2017 at 02:33:17PM +0100, Fabian Maurer wrote:
> v4
> remove global variable
> don't check if functions are available
> fix RemoveFontResourceExA test
> properly release dc
> add another test for completeness sake
> v6
> Don't truncate strings, instead only compare up to LF_FACESIZE - 1 characters
> Also fix copying of the strings if they should be too long
> 
> Signed-off-by: Fabian Maurer <dark.shadow4 at web.de>
> ---
>  dlls/gdi32/freetype.c              |  45 +++++++++++--------------
>  dlls/gdi32/tests/font.c            |  54 ++++++++++++++++++++++++++++++
>  dlls/gdi32/tests/resource.rc       |   3 ++
>  dlls/gdi32/tests/wine_longname.sfd |  66 +++++++++++++++++++++++++++++++++++++
>  dlls/gdi32/tests/wine_longname.ttf | Bin 0 -> 2252 bytes
>  5 files changed, 142 insertions(+), 26 deletions(-)
>  create mode 100644 dlls/gdi32/tests/wine_longname.sfd
>  create mode 100644 dlls/gdi32/tests/wine_longname.ttf
> 
> diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
> index 346e21dc21..7c5a7ef979 100644
> --- a/dlls/gdi32/freetype.c
> +++ b/dlls/gdi32/freetype.c
> @@ -1027,7 +1027,7 @@ static Face *find_face_from_filename(const WCHAR *file_name, const WCHAR *face_n
>      LIST_FOR_EACH_ENTRY(family, &font_list, Family, entry)
>      {
>          const struct list *face_list;
> -        if(face_name && strcmpiW(face_name, family->FamilyName))
> +        if(face_name && strncmpiW(face_name, family->FamilyName, LF_FACESIZE - 1))
>              continue;
>          face_list = get_face_list_from_family(family);
>          LIST_FOR_EACH_ENTRY(face, face_list, Face, entry)

How about truncating FamilyName to LF_FACESIZE-1 and FuillName to
LF_FULLFACESIZE-1.  Then most comparisons would be strcmpiW(), except
the two where we compare FullName with something that came from an
lfFaceName?

Huw.



More information about the wine-devel mailing list