freetype-commit
[Top][All Lists]
Advanced

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

[Git][freetype/freetype][master] [sfnt] Reject malformed SVG tables.


From: Werner Lemberg (@wl)
Subject: [Git][freetype/freetype][master] [sfnt] Reject malformed SVG tables.
Date: Sat, 22 Jan 2022 11:09:24 +0000

Werner Lemberg pushed to branch master at FreeType / FreeType

Commits:

1 changed file:

Changes:

  • src/sfnt/ttsvg.c
    ... ... @@ -38,6 +38,14 @@
    38 38
     #include "ttsvg.h"
    
    39 39
     
    
    40 40
     
    
    41
    +  /* NOTE: These table sizes are given by the specification. */
    
    42
    +#define SVG_TABLE_HEADER_SIZE           10U
    
    43
    +#define SVG_DOCUMENT_RECORD_SIZE        12U
    
    44
    +#define SVG_DOCUMENT_LIST_MINIMUM_SIZE  2U + SVG_DOCUMENT_RECORD_SIZE
    
    45
    +#define SVG_MINIMUM_SIZE                SVG_TABLE_HEADER_SIZE +        \
    
    46
    +                                        SVG_DOCUMENT_LIST_MINIMUM_SIZE
    
    47
    +
    
    48
    +
    
    41 49
       typedef struct  Svg_
    
    42 50
       {
    
    43 51
         FT_UShort  version;                 /* table version (starting at 0)  */
    
    ... ... @@ -79,6 +87,9 @@
    79 87
         if ( error )
    
    80 88
           goto NoSVG;
    
    81 89
     
    
    90
    +    if ( table_size < SVG_MINIMUM_SIZE )
    
    91
    +      goto InvalidTable;
    
    92
    +
    
    82 93
         if ( FT_FRAME_EXTRACT( table_size, table ) )
    
    83 94
           goto NoSVG;
    
    84 95
     
    
    ... ... @@ -90,7 +101,9 @@
    90 101
         svg->version            = FT_NEXT_USHORT( p );
    
    91 102
         offsetToSVGDocumentList = FT_NEXT_ULONG( p );
    
    92 103
     
    
    93
    -    if ( offsetToSVGDocumentList == 0 )
    
    104
    +    if ( offsetToSVGDocumentList < SVG_TABLE_HEADER_SIZE            ||
    
    105
    +         offsetToSVGDocumentList > table_size -
    
    106
    +                                     SVG_DOCUMENT_LIST_MINIMUM_SIZE )
    
    94 107
           goto InvalidTable;
    
    95 108
     
    
    96 109
         svg->svg_doc_list = (FT_Byte*)( table + offsetToSVGDocumentList );
    
    ... ... @@ -101,6 +114,10 @@
    101 114
         FT_TRACE3(( "version: %d\n", svg->version ));
    
    102 115
         FT_TRACE3(( "number of entries: %d\n", svg->num_entries ));
    
    103 116
     
    
    117
    +    if ( offsetToSVGDocumentList +
    
    118
    +           svg->num_entries * SVG_DOCUMENT_RECORD_SIZE > table_size )
    
    119
    +      goto InvalidTable;
    
    120
    +
    
    104 121
         svg->table      = table;
    
    105 122
         svg->table_size = table_size;
    
    106 123
     
    


  • reply via email to

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