freetype-commit
[Top][All Lists]
Advanced

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

[Git][freetype/freetype][fix1270] [cache] Fix error handling.


From: Alexei Podtelezhnikov (@apodtele)
Subject: [Git][freetype/freetype][fix1270] [cache] Fix error handling.
Date: Wed, 17 Apr 2024 04:49:41 +0000

Alexei Podtelezhnikov pushed to branch fix1270 at FreeType / FreeType

Commits:

  • d091bca5
    by Alexei Podtelezhnikov (Алексей Подтележников) at 2024-04-17T00:33:14-04:00
    [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.
    

2 changed files:

Changes:

  • src/cache/ftcmanag.c
    ... ... @@ -118,14 +118,21 @@
    118 118
                           FT_Pointer   ftcscaler,
    
    119 119
                           FT_Pointer   ftcmanager )
    
    120 120
       {
    
    121
    +    FT_Error      error;
    
    122
    +    FT_Size       size;
    
    121 123
         FTC_SizeNode  node    = (FTC_SizeNode)ftcnode;
    
    122 124
         FTC_Scaler    scaler  = (FTC_Scaler)ftcscaler;
    
    123 125
         FTC_Manager   manager = (FTC_Manager)ftcmanager;
    
    124 126
     
    
    125 127
     
    
    126
    -    node->scaler = scaler[0];
    
    128
    +    error = ftc_scaler_lookup_size( manager, scaler, &size );
    
    129
    +    if ( !error )
    
    130
    +    {
    
    131
    +      node->size   = size;
    
    132
    +      node->scaler = scaler[0];
    
    133
    +    }
    
    127 134
     
    
    128
    -    return ftc_scaler_lookup_size( manager, scaler, &node->size );
    
    135
    +    return error;
    
    129 136
       }
    
    130 137
     
    
    131 138
     
    
    ... ... @@ -134,16 +141,23 @@
    134 141
                            FT_Pointer   ftcscaler,
    
    135 142
                            FT_Pointer   ftcmanager )
    
    136 143
       {
    
    144
    +    FT_Error      error;
    
    145
    +    FT_Size       size;
    
    137 146
         FTC_SizeNode  node    = (FTC_SizeNode)ftcnode;
    
    138 147
         FTC_Scaler    scaler  = (FTC_Scaler)ftcscaler;
    
    139 148
         FTC_Manager   manager = (FTC_Manager)ftcmanager;
    
    140 149
     
    
    141 150
     
    
    142
    -    FT_Done_Size( node->size );
    
    151
    +    error = ftc_scaler_lookup_size( manager, scaler, &size );
    
    152
    +    if ( !error )
    
    153
    +    {
    
    154
    +      FT_Done_Size( node->size );
    
    143 155
     
    
    144
    -    node->scaler = scaler[0];
    
    156
    +      node->size   = size;
    
    157
    +      node->scaler = scaler[0];
    
    158
    +    }
    
    145 159
     
    
    146
    -    return ftc_scaler_lookup_size( manager, scaler, &node->size );
    
    160
    +    return error;
    
    147 161
       }
    
    148 162
     
    
    149 163
     
    
    ... ... @@ -231,23 +245,25 @@
    231 245
                           FT_Pointer   ftcface_id,
    
    232 246
                           FT_Pointer   ftcmanager )
    
    233 247
       {
    
    248
    +    FT_Error      error;
    
    249
    +    FT_Face       face;
    
    234 250
         FTC_FaceNode  node    = (FTC_FaceNode)ftcnode;
    
    235 251
         FTC_FaceID    face_id = (FTC_FaceID)ftcface_id;
    
    236 252
         FTC_Manager   manager = (FTC_Manager)ftcmanager;
    
    237
    -    FT_Error      error;
    
    238
    -
    
    239 253
     
    
    240
    -    node->face_id = face_id;
    
    241 254
     
    
    242 255
         error = manager->request_face( face_id,
    
    243 256
                                        manager->library,
    
    244 257
                                        manager->request_data,
    
    245
    -                                   &node->face );
    
    258
    +                                   &face );
    
    246 259
         if ( !error )
    
    247 260
         {
    
    248 261
           /* destroy initial size object; it will be re-created later */
    
    249
    -      if ( node->face->size )
    
    250
    -        FT_Done_Size( node->face->size );
    
    262
    +      if ( face->size )
    
    263
    +        FT_Done_Size( face->size );
    
    264
    +
    
    265
    +      node->face    = face;
    
    266
    +      node->face_id = face_id;
    
    251 267
         }
    
    252 268
     
    
    253 269
         return error;
    

  • src/cache/ftcmru.c
    ... ... @@ -249,11 +249,13 @@
    249 249
     
    
    250 250
           if ( list->clazz.node_reset )
    
    251 251
           {
    
    252
    -        FTC_MruNode_Up( &list->nodes, node );
    
    253
    -
    
    254 252
             error = list->clazz.node_reset( node, key, list->data );
    
    255 253
             if ( !error )
    
    256
    -          goto Exit;
    
    254
    +          FTC_MruNode_Up( &list->nodes, node );
    
    255
    +        else
    
    256
    +          node = NULL;
    
    257
    +
    
    258
    +        goto Exit;
    
    257 259
           }
    
    258 260
     
    
    259 261
           FTC_MruNode_Remove( &list->nodes, node );
    


  • reply via email to

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