[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 );
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [freetype2] fix1270 d091bca54: [cache] Fix error handling.,
Werner Lemberg <=