freetype-commit
[Top][All Lists]
Advanced

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

[Git][freetype/freetype][master] [truetype] Handle inner/outer index val


From: Werner Lemberg (@wl)
Subject: [Git][freetype/freetype][master] [truetype] Handle inner/outer index values 0xFFFF/0xFFFF.
Date: Wed, 11 May 2022 16:20:47 +0000

Werner Lemberg pushed to branch master at FreeType / FreeType

Commits:

1 changed file:

Changes:

  • src/truetype/ttgxvar.c
    ... ... @@ -484,6 +484,16 @@
    484 484
           goto Exit;
    
    485 485
         }
    
    486 486
     
    
    487
    +    /* new in OpenType 1.8.4: inner & outer index equal to 0xFFFF    */
    
    488
    +    /* has a special meaning (i.e., no variation data for this item) */
    
    489
    +    if ( itemStore->dataCount == 0xFFFFU )
    
    490
    +    {
    
    491
    +      FT_TRACE2(( "ft_var_load_item_variation_store:"
    
    492
    +                  " dataCount too large\n" ));
    
    493
    +      error = FT_THROW( Invalid_Table );
    
    494
    +      goto Exit;
    
    495
    +    }
    
    496
    +
    
    487 497
         /* make temporary copy of item variation data offsets; */
    
    488 498
         /* we will parse region list first, then come back     */
    
    489 499
         if ( FT_QNEW_ARRAY( dataOffsetArray, itemStore->dataCount ) )
    
    ... ... @@ -758,6 +768,16 @@
    758 768
             mapData = ( mapData << 8 ) | data;
    
    759 769
           }
    
    760 770
     
    
    771
    +      /* new in OpenType 1.8.4 */
    
    772
    +      if ( mapData == 0xFFFFFFFFUL )
    
    773
    +      {
    
    774
    +        /* no variation data for this item */
    
    775
    +        map->outerIndex[i] = 0xFFFFU;
    
    776
    +        map->innerIndex[i] = 0xFFFFU;
    
    777
    +
    
    778
    +        continue;
    
    779
    +      }
    
    780
    +
    
    761 781
           outerIndex = mapData >> innerBitCount;
    
    762 782
     
    
    763 783
           if ( outerIndex >= itemStore->dataCount )
    
    ... ... @@ -1128,19 +1148,29 @@
    1128 1148
           }
    
    1129 1149
         }
    
    1130 1150
     
    
    1131
    -    delta = ft_var_get_item_delta( face,
    
    1132
    -                                   &table->itemStore,
    
    1133
    -                                   outerIndex,
    
    1134
    -                                   innerIndex );
    
    1135
    -
    
    1136
    -    FT_TRACE5(( "%s value %d adjusted by %d unit%s (%s)\n",
    
    1137
    -                vertical ? "vertical height" : "horizontal width",
    
    1138
    -                *avalue,
    
    1139
    -                delta,
    
    1140
    -                delta == 1 ? "" : "s",
    
    1141
    -                vertical ? "VVAR" : "HVAR" ));
    
    1142
    -
    
    1143
    -    *avalue += delta;
    
    1151
    +    /* new test introduced in OpenType 1.8.4 */
    
    1152
    +    if ( outerIndex == 0xFFFFU && innerIndex == 0xFFFFU )
    
    1153
    +    {
    
    1154
    +      FT_TRACE5(( "no adjustment to %s value %d\n",
    
    1155
    +                  vertical ? "vertical height" : "horizontal width",
    
    1156
    +                  *avalue ));
    
    1157
    +    }
    
    1158
    +    else
    
    1159
    +    {
    
    1160
    +      delta = ft_var_get_item_delta( face,
    
    1161
    +                                     &table->itemStore,
    
    1162
    +                                     outerIndex,
    
    1163
    +                                     innerIndex );
    
    1164
    +
    
    1165
    +      FT_TRACE5(( "%s value %d adjusted by %d unit%s (%s)\n",
    
    1166
    +                  vertical ? "vertical height" : "horizontal width",
    
    1167
    +                  *avalue,
    
    1168
    +                  delta,
    
    1169
    +                  delta == 1 ? "" : "s",
    
    1170
    +                  vertical ? "VVAR" : "HVAR" ));
    
    1171
    +
    
    1172
    +      *avalue += delta;
    
    1173
    +    }
    
    1144 1174
     
    
    1145 1175
       Exit:
    
    1146 1176
         return error;
    
    ... ... @@ -1332,6 +1362,13 @@
    1332 1362
           value->outerIndex = FT_GET_USHORT();
    
    1333 1363
           value->innerIndex = FT_GET_USHORT();
    
    1334 1364
     
    
    1365
    +      /* new in OpenType 1.8.4 */
    
    1366
    +      if ( value->outerIndex == 0xFFFFU && value->innerIndex == 0xFFFFU )
    
    1367
    +      {
    
    1368
    +        /* no variation data for this item */
    
    1369
    +        continue;
    
    1370
    +      }
    
    1371
    +
    
    1335 1372
           if ( value->outerIndex >= itemStore->dataCount                  ||
    
    1336 1373
                value->innerIndex >= itemStore->varData[value->outerIndex]
    
    1337 1374
                                                       .itemCount          )
    
    ... ... @@ -1422,6 +1459,13 @@
    1422 1459
           FT_Int     delta;
    
    1423 1460
     
    
    1424 1461
     
    
    1462
    +      /* new test introduced in OpenType 1.8.4 */
    
    1463
    +      if ( value->outerIndex == 0xFFFFU && value->innerIndex == 0xFFFFU )
    
    1464
    +      {
    
    1465
    +        /* no variation data for this item */
    
    1466
    +        continue;
    
    1467
    +      }
    
    1468
    +
    
    1425 1469
           delta = ft_var_get_item_delta( face,
    
    1426 1470
                                          &blend->mvar_table->itemStore,
    
    1427 1471
                                          value->outerIndex,
    


  • reply via email to

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