Nikolay Sivov : dwrite: Filter out unusable ranges on AddMapping().
Alexandre Julliard
julliard at winehq.org
Fri Jul 22 15:38:23 CDT 2022
Module: wine
Branch: master
Commit: 78846236b938b1c5f2d2221ed0050656b54fb08e
URL: https://gitlab.winehq.org/wine/wine/-/commit/78846236b938b1c5f2d2221ed0050656b54fb08e
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Sat Jul 16 15:13:01 2022 +0300
dwrite: Filter out unusable ranges on AddMapping().
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
dlls/dwrite/analyzer.c | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/dlls/dwrite/analyzer.c b/dlls/dwrite/analyzer.c
index 2f5f1e1d7fe..1522d7638bc 100644
--- a/dlls/dwrite/analyzer.c
+++ b/dlls/dwrite/analyzer.c
@@ -2374,7 +2374,7 @@ static HRESULT WINAPI fontfallbackbuilder_AddMapping(IDWriteFontFallbackBuilder
{
struct dwrite_fontfallback_builder *builder = impl_from_IDWriteFontFallbackBuilder(iface);
struct fallback_mapping *mapping;
- UINT32 i;
+ unsigned int i, count;
TRACE("%p, %p, %u, %p, %u, %p, %s, %s, %f.\n", iface, ranges, ranges_count, families, families_count,
collection, debugstr_w(locale_name), debugstr_w(base_family), scale);
@@ -2397,8 +2397,22 @@ static HRESULT WINAPI fontfallbackbuilder_AddMapping(IDWriteFontFallbackBuilder
if (!(mapping->ranges = calloc(ranges_count, sizeof(*mapping->ranges))))
goto failed;
- mapping->ranges_count = ranges_count;
- memcpy(mapping->ranges, ranges, sizeof(*mapping->ranges) * ranges_count);
+ /* Filter ranges that won't be usable. */
+ for (i = 0, count = 0; i < ranges_count; ++i)
+ {
+ if (ranges[i].first > ranges[i].last) continue;
+ if (ranges[i].first > 0x10ffff) continue;
+ mapping->ranges[count].first = ranges[i].first;
+ mapping->ranges[count].last = min(ranges[i].last, 0x10ffff);
+ count++;
+ }
+ if (!count)
+ {
+ release_fallback_mapping(mapping);
+ return S_OK;
+ }
+
+ mapping->ranges_count = count;
if (!(mapping->families = calloc(families_count, sizeof(*mapping->families))))
goto failed;
More information about the wine-cvs
mailing list