]> granicus.if.org Git - libass/commitdiff
directwrite: fix error handling in font scanning
authorStephan Vedder <stephan.vedder@gmail.com>
Sat, 23 May 2015 12:06:54 +0000 (14:06 +0200)
committerGrigori Goronzy <greg@chown.ath.cx>
Fri, 10 Jul 2015 08:42:41 +0000 (10:42 +0200)
Fix that a single broken font could mess up the entire font scanning.

libass/ass_directwrite.cpp

index 16ac8d7c5d334506a7c13ac1dee51f50f88eb615..743b06535fda1accf745f064cb520f39f2968506 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2015 Stephan Vedder <stefano.pigozzi@gmail.com>
+ * Copyright (C) 2015 Stephan Vedder <stephan.vedder@gmail.com>
  *
  * This file is part of libass.
  *
@@ -189,7 +189,7 @@ static void scan_fonts(IDWriteFactory *factory, ASS_FontProvider *provider)
                {
                        hr = fontFamily->GetFont(j, &font);
                        if (FAILED(hr))
-                               return;
+                               continue;
                        
                        meta.weight = font->GetWeight();
                        meta.width = map_width(font->GetStretch());
@@ -201,13 +201,13 @@ static void scan_fonts(IDWriteFactory *factory, ASS_FontProvider *provider)
 
                        hr = font->GetInformationalStrings(DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_NAME, &psNames, &exists);
                        if (FAILED(hr))
-                               return;
+                               continue;
 
                        if (exists)
                        {
                                hr = psNames->GetString(0, localeName, LOCALE_NAME_MAX_LENGTH + 1);
                                if (FAILED(hr))
-                                       return;
+                                       continue;
 
                                size_needed = WideCharToMultiByte(CP_UTF8, 0, localeName, -1, NULL, 0, NULL, NULL);
                                psName = (char*)malloc(size_needed);
@@ -216,7 +216,7 @@ static void scan_fonts(IDWriteFactory *factory, ASS_FontProvider *provider)
                
                        hr = font->GetInformationalStrings(DWRITE_INFORMATIONAL_STRING_FULL_NAME, &fontNames, &exists);
                        if (FAILED(hr))
-                               return;
+                               continue;
 
                        meta.n_fullname = fontNames->GetCount();
                        meta.fullnames = (char **)calloc(meta.n_fullname, sizeof(char *));
@@ -224,7 +224,7 @@ static void scan_fonts(IDWriteFactory *factory, ASS_FontProvider *provider)
                        {
                                hr = fontNames->GetString(k,localeName, LOCALE_NAME_MAX_LENGTH + 1);
                                if (FAILED(hr))
-                                       return;
+                                       continue;
 
                                size_needed = WideCharToMultiByte(CP_UTF8, 0, localeName, -1, NULL, 0, NULL, NULL);
                                char* mbName = (char *)malloc(size_needed);
@@ -234,7 +234,7 @@ static void scan_fonts(IDWriteFactory *factory, ASS_FontProvider *provider)
 
                        hr = fontFamily->GetFamilyNames(&familyNames);
                        if (FAILED(hr))
-                               return;
+                               continue;
                        
                        meta.n_family = familyNames->GetCount();
                        meta.families = (char **)calloc(meta.n_family, sizeof(char *));
@@ -242,7 +242,7 @@ static void scan_fonts(IDWriteFactory *factory, ASS_FontProvider *provider)
                        {
                                hr = familyNames->GetString(k, localeName, LOCALE_NAME_MAX_LENGTH + 1);
                                if (FAILED(hr))
-                                       return;
+                                       continue;
 
                                size_needed = WideCharToMultiByte(CP_UTF8, 0, localeName, -1, NULL, 0, NULL, NULL);
                                char* mbName = (char *)malloc(size_needed);