freetype-commit
[Top][All Lists]
Advanced

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

[freetype2-demos] master 2ab77c7: * src/ftcommon.c (FTDemo_Install_Font)


From: Werner LEMBERG
Subject: [freetype2-demos] master 2ab77c7: * src/ftcommon.c (FTDemo_Install_Font): Handle alloc/file errors.
Date: Thu, 10 Dec 2015 06:30:29 +0000

branch: master
commit 2ab77c726fbca88f47f1ec22e564c2f9571d5aaa
Author: Werner Lemberg <address@hidden>
Commit: Werner Lemberg <address@hidden>

    * src/ftcommon.c (FTDemo_Install_Font): Handle alloc/file errors.
    
    Problem reported by Alexei.
---
 ChangeLog      |    6 ++++++
 src/ftcommon.c |   29 +++++++++++++++++++++++------
 2 files changed, 29 insertions(+), 6 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 75a1350..f7d8780 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2015-12-10  Werner Lemberg  <address@hidden>
+
+       * src/ftcommon.c (FTDemo_Install_Font): Handle alloc/file errors.
+
+       Problem reported by Alexei.
+
 2015-12-09  Alexei Podtelezhnikov  <address@hidden>
 
        * src/ftstring.c (event_angle_change): Wrap angle differently.
diff --git a/src/ftcommon.c b/src/ftcommon.c
index 11f71c5..bdf0d1f 100644
--- a/src/ftcommon.c
+++ b/src/ftcommon.c
@@ -433,8 +433,8 @@
 
         if ( handle->preload )
         {
-          FILE*  file = fopen( filename, "rb" );
-          int    file_size;
+          FILE*   file = fopen( filename, "rb" );
+          size_t  file_size;
 
 
           if ( file == NULL )  /* shouldn't happen */
@@ -444,16 +444,33 @@
           }
 
           fseek( file, 0, SEEK_END );
-          file_size = ftell( file );
+          file_size = (size_t)ftell( file );
           fseek( file, 0, SEEK_SET );
 
           if ( file_size <= 0 )
+          {
+            free( font );
+            fclose( file );
             return FT_Err_Invalid_Stream_Operation;
+          }
+
+          font->file_address = malloc( file_size );
+          if ( !font->file_address )
+          {
+            free( font );
+            fclose( file );
+            return FT_Err_Out_Of_Memory;
+          }
 
-          font->file_address = malloc( (size_t)file_size );
-          fread( font->file_address, 1, (size_t)file_size, file );
+          if ( fread( font->file_address, 1, file_size, file ) != file_size )
+          {
+            free( font->file_address );
+            free( font );
+            fclose( file );
+            return FT_Err_Invalid_Stream_Read;
+          }
 
-          font->file_size = (size_t)file_size;
+          font->file_size = file_size;
 
           fclose( file );
         }



reply via email to

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