freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freetype2] fix1270 d091bca54: [cache] Fix error handling.


From: Werner Lemberg
Subject: [freetype2] fix1270 d091bca54: [cache] Fix error handling.
Date: Wed, 17 Apr 2024 00:49:50 -0400 (EDT)

branch: fix1270
commit d091bca546fa15928db36c8447e126ee43ddb5f4
Author: Alexei Podtelezhnikov <apodtele@gmail.com>
Commit: Alexei Podtelezhnikov <apodtele@gmail.com>

    [cache] Fix error handling.
    
    Manipulate the cache after a face is requested or a size is looked up
    successfully. Fixes #1270.
    
    * src/cache/ftcmanag.c (ftc_size_node_init, ftc_size_node_reset,
    ftc_face_node_init): Check for errors before accepting a change.
    * src/cache/ftcmru.c (FTC_MruList_New): Do nothing if reset fails.
---
 src/cache/ftcmanag.c | 38 +++++++++++++++++++++++++++-----------
 src/cache/ftcmru.c   |  8 +++++---
 2 files changed, 32 insertions(+), 14 deletions(-)

diff --git a/src/cache/ftcmanag.c b/src/cache/ftcmanag.c
index dd9bb6190..6b8b80e33 100644
--- a/src/cache/ftcmanag.c
+++ b/src/cache/ftcmanag.c
@@ -118,14 +118,21 @@
                       FT_Pointer   ftcscaler,
                       FT_Pointer   ftcmanager )
   {
+    FT_Error      error;
+    FT_Size       size;
     FTC_SizeNode  node    = (FTC_SizeNode)ftcnode;
     FTC_Scaler    scaler  = (FTC_Scaler)ftcscaler;
     FTC_Manager   manager = (FTC_Manager)ftcmanager;
 
 
-    node->scaler = scaler[0];
+    error = ftc_scaler_lookup_size( manager, scaler, &size );
+    if ( !error )
+    {
+      node->size   = size;
+      node->scaler = scaler[0];
+    }
 
-    return ftc_scaler_lookup_size( manager, scaler, &node->size );
+    return error;
   }
 
 
@@ -134,16 +141,23 @@
                        FT_Pointer   ftcscaler,
                        FT_Pointer   ftcmanager )
   {
+    FT_Error      error;
+    FT_Size       size;
     FTC_SizeNode  node    = (FTC_SizeNode)ftcnode;
     FTC_Scaler    scaler  = (FTC_Scaler)ftcscaler;
     FTC_Manager   manager = (FTC_Manager)ftcmanager;
 
 
-    FT_Done_Size( node->size );
+    error = ftc_scaler_lookup_size( manager, scaler, &size );
+    if ( !error )
+    {
+      FT_Done_Size( node->size );
 
-    node->scaler = scaler[0];
+      node->size   = size;
+      node->scaler = scaler[0];
+    }
 
-    return ftc_scaler_lookup_size( manager, scaler, &node->size );
+    return error;
   }
 
 
@@ -231,23 +245,25 @@
                       FT_Pointer   ftcface_id,
                       FT_Pointer   ftcmanager )
   {
+    FT_Error      error;
+    FT_Face       face;
     FTC_FaceNode  node    = (FTC_FaceNode)ftcnode;
     FTC_FaceID    face_id = (FTC_FaceID)ftcface_id;
     FTC_Manager   manager = (FTC_Manager)ftcmanager;
-    FT_Error      error;
-
 
-    node->face_id = face_id;
 
     error = manager->request_face( face_id,
                                    manager->library,
                                    manager->request_data,
-                                   &node->face );
+                                   &face );
     if ( !error )
     {
       /* destroy initial size object; it will be re-created later */
-      if ( node->face->size )
-        FT_Done_Size( node->face->size );
+      if ( face->size )
+        FT_Done_Size( face->size );
+
+      node->face    = face;
+      node->face_id = face_id;
     }
 
     return error;
diff --git a/src/cache/ftcmru.c b/src/cache/ftcmru.c
index 7171d4d20..dd23d31a3 100644
--- a/src/cache/ftcmru.c
+++ b/src/cache/ftcmru.c
@@ -249,11 +249,13 @@
 
       if ( list->clazz.node_reset )
       {
-        FTC_MruNode_Up( &list->nodes, node );
-
         error = list->clazz.node_reset( node, key, list->data );
         if ( !error )
-          goto Exit;
+          FTC_MruNode_Up( &list->nodes, node );
+        else
+          node = NULL;
+
+        goto Exit;
       }
 
       FTC_MruNode_Remove( &list->nodes, node );



reply via email to

[Prev in Thread] Current Thread [Next in Thread]