Any comments on why? What failed? (Not that I think massive sign changes
are sane..)

On Wed, Aug 8, 2018 at 7:17 PM, Alexei Podtelezhnikov <[email protected]>
wrote:

> branch: master
> commit 6a97c95800e8a76e9595791042d74dd3fbf02f50
> Author: Alexei Podtelezhnikov <[email protected]>
> Commit: Alexei Podtelezhnikov <[email protected]>
>
>     [pcf] Revert massive unsigning.
> ---
>  ChangeLog          |   4 ++
>  src/pcf/pcf.h      |  12 +++---
>  src/pcf/pcfdrivr.c |  12 +++---
>  src/pcf/pcfread.c  | 120 ++++++++++++++++++++++++++++++
> ++++-------------------
>  4 files changed, 94 insertions(+), 54 deletions(-)
>
> diff --git a/ChangeLog b/ChangeLog
> index 5a4bac0..6a4ca57 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,7 @@
> +2018-08-08  Alexei Podtelezhnikov  <[email protected]>
> +
> +       [pcf] Revert massive unsigning.
> +
>  2018-08-08  Werner Lemberg  <[email protected]>
>
>         [smooth] Improve tracing.
> diff --git a/src/pcf/pcf.h b/src/pcf/pcf.h
> index ce5df0b..3c4eb6a 100644
> --- a/src/pcf/pcf.h
> +++ b/src/pcf/pcf.h
> @@ -57,9 +57,9 @@ FT_BEGIN_HEADER
>
>    typedef struct  PCF_ParsePropertyRec_
>    {
> -    FT_ULong  name;
> -    FT_Byte   isString;
> -    FT_ULong  value;
> +    FT_Long  name;
> +    FT_Byte  isString;
> +    FT_Long  value;
>
>    } PCF_ParsePropertyRec, *PCF_ParseProperty;
>
> @@ -113,9 +113,9 @@ FT_BEGIN_HEADER
>      FT_Byte        inkInside;
>      FT_Byte        inkMetrics;
>      FT_Byte        drawDirection;
> -    FT_ULong       fontAscent;
> -    FT_ULong       fontDescent;
> -    FT_ULong       maxOverlap;
> +    FT_Long        fontAscent;
> +    FT_Long        fontDescent;
> +    FT_Long        maxOverlap;
>      PCF_MetricRec  minbounds;
>      PCF_MetricRec  maxbounds;
>      PCF_MetricRec  ink_minbounds;
> diff --git a/src/pcf/pcfdrivr.c b/src/pcf/pcfdrivr.c
> index 90fb896..e2f7e7c 100644
> --- a/src/pcf/pcfdrivr.c
> +++ b/src/pcf/pcfdrivr.c
> @@ -441,8 +441,8 @@ THE SOFTWARE.
>
>      FT_Select_Metrics( size->face, strike_index );
>
> -    size->metrics.ascender    =  (FT_Pos)accel->fontAscent * 64;
> -    size->metrics.descender   = -(FT_Pos)accel->fontDescent * 64;
> +    size->metrics.ascender    =  accel->fontAscent * 64;
> +    size->metrics.descender   = -accel->fontDescent * 64;
>      size->metrics.max_advance =  accel->maxbounds.characterWidth * 64;
>
>      return FT_Err_Ok;
> @@ -470,8 +470,8 @@ THE SOFTWARE.
>        break;
>
>      case FT_SIZE_REQUEST_TYPE_REAL_DIM:
> -      if ( (FT_ULong)height == ( face->accel.fontAscent +
> -                                 face->accel.fontDescent ) )
> +      if ( height == ( face->accel.fontAscent +
> +                       face->accel.fontDescent ) )
>          error = FT_Err_Ok;
>        break;
>
> @@ -560,8 +560,8 @@ THE SOFTWARE.
>      slot->metrics.height       = (FT_Pos)( bitmap->rows * 64 );
>
>      ft_synthesize_vertical_metrics( &slot->metrics,
> -                                    (FT_Pos)( face->accel.fontAscent +
> -                                              face->accel.fontDescent ) *
> 64 );
> +                                    ( face->accel.fontAscent +
> +                                      face->accel.fontDescent ) * 64 );
>
>      if ( load_flags & FT_LOAD_BITMAP_METRICS_ONLY )
>        goto Exit;
> diff --git a/src/pcf/pcfread.c b/src/pcf/pcfread.c
> index 6b28c04..14cce67 100644
> --- a/src/pcf/pcfread.c
> +++ b/src/pcf/pcfread.c
> @@ -239,7 +239,7 @@ THE SOFTWARE.
>        {
>          for ( j = 0; j < sizeof ( tableNames ) / sizeof ( tableNames[0] );
>                j++ )
> -          if ( tables[i].type == ( 1U << j ) )
> +          if ( tables[i].type == (FT_UInt)( 1 << j ) )
>              name = tableNames[j];
>
>          FT_TRACE4(( "  %d: type=%s, format=0x%X,"
> @@ -433,9 +433,9 @@ THE SOFTWARE.
>  #define FT_STRUCTURE  PCF_ParsePropertyRec
>
>      FT_FRAME_START( PCF_PROPERTY_SIZE ),
> -      FT_FRAME_ULONG_LE( name ),
> -      FT_FRAME_BYTE    ( isString ),
> -      FT_FRAME_ULONG_LE( value ),
> +      FT_FRAME_LONG_LE( name ),
> +      FT_FRAME_BYTE   ( isString ),
> +      FT_FRAME_LONG_LE( value ),
>      FT_FRAME_END
>    };
>
> @@ -447,9 +447,9 @@ THE SOFTWARE.
>  #define FT_STRUCTURE  PCF_ParsePropertyRec
>
>      FT_FRAME_START( PCF_PROPERTY_SIZE ),
> -      FT_FRAME_ULONG( name ),
> -      FT_FRAME_BYTE ( isString ),
> -      FT_FRAME_ULONG( value ),
> +      FT_FRAME_LONG( name ),
> +      FT_FRAME_BYTE( isString ),
> +      FT_FRAME_LONG( value ),
>      FT_FRAME_END
>    };
>
> @@ -623,10 +623,11 @@ THE SOFTWARE.
>      FT_TRACE4(( "\n" ));
>      for ( i = 0; i < nprops; i++ )
>      {
> -      FT_ULong  name_offset = props[i].name;
> +      FT_Long  name_offset = props[i].name;
>
>
> -      if ( name_offset > string_size )
> +      if ( ( name_offset < 0 )                     ||
> +           ( (FT_ULong)name_offset > string_size ) )
>        {
>          error = FT_THROW( Invalid_Offset );
>          goto Bail;
> @@ -641,10 +642,11 @@ THE SOFTWARE.
>
>        if ( props[i].isString )
>        {
> -        FT_ULong  value_offset = props[i].value;
> +        FT_Long  value_offset = props[i].value;
>
>
> -        if ( value_offset > string_size )
> +        if ( ( value_offset < 0 )                     ||
> +             ( (FT_ULong)value_offset > string_size ) )
>          {
>            error = FT_THROW( Invalid_Offset );
>            goto Bail;
> @@ -657,7 +659,7 @@ THE SOFTWARE.
>        }
>        else
>        {
> -        properties[i].value.ul = props[i].value;
> +        properties[i].value.l = props[i].value;
>
>          FT_TRACE4(( " %d\n", properties[i].value.l ));
>        }
> @@ -1137,9 +1139,9 @@ THE SOFTWARE.
>        FT_FRAME_BYTE      ( inkMetrics ),
>        FT_FRAME_BYTE      ( drawDirection ),
>        FT_FRAME_SKIP_BYTES( 1 ),
> -      FT_FRAME_ULONG_LE  ( fontAscent ),
> -      FT_FRAME_ULONG_LE  ( fontDescent ),
> -      FT_FRAME_ULONG_LE  ( maxOverlap ),
> +      FT_FRAME_LONG_LE   ( fontAscent ),
> +      FT_FRAME_LONG_LE   ( fontDescent ),
> +      FT_FRAME_LONG_LE   ( maxOverlap ),
>      FT_FRAME_END
>    };
>
> @@ -1159,9 +1161,9 @@ THE SOFTWARE.
>        FT_FRAME_BYTE      ( inkMetrics ),
>        FT_FRAME_BYTE      ( drawDirection ),
>        FT_FRAME_SKIP_BYTES( 1 ),
> -      FT_FRAME_ULONG     ( fontAscent ),
> -      FT_FRAME_ULONG     ( fontDescent ),
> -      FT_FRAME_ULONG     ( maxOverlap ),
> +      FT_FRAME_LONG      ( fontAscent ),
> +      FT_FRAME_LONG      ( fontDescent ),
> +      FT_FRAME_LONG      ( maxOverlap ),
>      FT_FRAME_END
>    };
>
> @@ -1215,7 +1217,7 @@ THE SOFTWARE.
>      FT_TRACE5(( "  noOverlap=%s, constantMetrics=%s,"
>                  " terminalFont=%s, constantWidth=%s\n"
>                  "  inkInside=%s, inkMetrics=%s, drawDirection=%s\n"
> -                "  fontAscent=%lu, fontDescent=%lu, maxOverlap=%lu\n",
> +                "  fontAscent=%ld, fontDescent=%ld, maxOverlap=%ld\n",
>                  accel->noOverlap ? "yes" : "no",
>                  accel->constantMetrics ? "yes" : "no",
>                  accel->terminalFont ? "yes" : "no",
> @@ -1227,17 +1229,17 @@ THE SOFTWARE.
>                  accel->fontDescent,
>                  accel->maxOverlap ));
>
> -    /* sanity checks so that combined height can fit short */
> -    if ( accel->fontAscent > 0x3FFFU )
> +    /* sanity checks */
> +    if ( FT_ABS( accel->fontAscent ) > 0x7FFF )
>      {
> -      accel->fontAscent = 0x3FFFU;
> -      FT_TRACE0(( "pfc_get_accel: clamping font ascent to value %u\n",
> +      accel->fontAscent = accel->fontAscent < 0 ? -0x7FFF : 0x7FFF;
> +      FT_TRACE0(( "pfc_get_accel: clamping font ascent to value %d\n",
>                    accel->fontAscent ));
>      }
> -    if ( accel->fontDescent > 0x3FFFU )
> +    if ( FT_ABS( accel->fontDescent ) > 0x7FFF )
>      {
> -      accel->fontDescent = 0x3FFFU;
> -      FT_TRACE0(( "pfc_get_accel: clamping font descent to value %u\n",
> +      accel->fontDescent = accel->fontDescent < 0 ? -0x7FFF : 0x7FFF;
> +      FT_TRACE0(( "pfc_get_accel: clamping font descent to value %d\n",
>                    accel->fontDescent ));
>      }
>
> @@ -1563,78 +1565,112 @@ THE SOFTWARE.
>          bsize->height = face->accel.maxbounds.ascent << 6;
>  #endif
>
> -        bsize->height = (FT_Short)( face->accel.fontAscent +
> -                                    face->accel.fontDescent );
> +#ifdef FT_DEBUG_LEVEL_TRACE
> +        if ( face->accel.fontAscent + face->accel.fontDescent < 0 )
> +          FT_TRACE0(( "pcf_load_font: negative height\n" ));
> +#endif
> +        if ( FT_ABS( face->accel.fontAscent +
> +                     face->accel.fontDescent ) > 0x7FFF )
> +        {
> +          bsize->height = 0x7FFF;
> +          FT_TRACE0(( "pcf_load_font: clamping height to value %d\n",
> +                      bsize->height ));
> +        }
> +        else
> +          bsize->height = FT_ABS( (FT_Short)( face->accel.fontAscent +
> +                                              face->accel.fontDescent ) );
>
>          prop = pcf_find_property( face, "AVERAGE_WIDTH" );
>          if ( prop )
>          {
> -          if ( prop->value.ul > 0x7FFFUL * 10 - 5 )
> +#ifdef FT_DEBUG_LEVEL_TRACE
> +          if ( prop->value.l < 0 )
> +            FT_TRACE0(( "pcf_load_font: negative average width\n" ));
> +#endif
> +          if ( ( FT_ABS( prop->value.l ) > 0x7FFFL * 10 - 5 ) )
>            {
>              bsize->width = 0x7FFF;
> -            FT_TRACE0(( "pcf_load_font: clamping average width to value
> %hd\n",
> +            FT_TRACE0(( "pcf_load_font: clamping average width to value
> %d\n",
>                          bsize->width ));
>            }
>            else
> -            bsize->width = (FT_Short)( ( prop->value.ul + 5 ) / 10 );
> +            bsize->width = FT_ABS( (FT_Short)( ( prop->value.l + 5 ) / 10
> ) );
>          }
>          else
>          {
>            /* this is a heuristical value */
> -          bsize->width = bsize->height - bsize->height / 3;
> +          bsize->width = (FT_Short)FT_MulDiv( bsize->height, 2, 3 );
>          }
>
>          prop = pcf_find_property( face, "POINT_SIZE" );
>          if ( prop )
>          {
> +#ifdef FT_DEBUG_LEVEL_TRACE
> +          if ( prop->value.l < 0 )
> +            FT_TRACE0(( "pcf_load_font: negative point size\n" ));
> +#endif
>            /* convert from 722.7 decipoints to 72 points per inch */
> -          if ( prop->value.ul > 0x504C2UL ) /* 0x7FFF * 72270/7200 */
> +          if ( FT_ABS( prop->value.l ) > 0x504C2L ) /* 0x7FFF *
> 72270/7200 */
>            {
>              bsize->size = 0x7FFF;
>              FT_TRACE0(( "pcf_load_font: clamping point size to value
> %d\n",
>                          bsize->size ));
>            }
>            else
> -            bsize->size = FT_MulDiv( prop->value.l, 64 * 7200, 72270L );
> +            bsize->size = FT_MulDiv( FT_ABS( prop->value.l ),
> +                                     64 * 7200,
> +                                     72270L );
>          }
>
>          prop = pcf_find_property( face, "PIXEL_SIZE" );
>          if ( prop )
>          {
> -          if ( prop->value.ul > 0x7FFFU )
> +#ifdef FT_DEBUG_LEVEL_TRACE
> +          if ( prop->value.l < 0 )
> +            FT_TRACE0(( "pcf_load_font: negative pixel size\n" ));
> +#endif
> +          if ( FT_ABS( prop->value.l ) > 0x7FFF )
>            {
> -            bsize->y_ppem = 0x7FFF * 64;
> +            bsize->y_ppem = 0x7FFF << 6;
>              FT_TRACE0(( "pcf_load_font: clamping pixel size to value
> %d\n",
>                          bsize->y_ppem ));
>            }
>            else
> -            bsize->y_ppem = (FT_Pos)prop->value.ul * 64;
> +            bsize->y_ppem = FT_ABS( (FT_Short)prop->value.l ) << 6;
>          }
>
>          prop = pcf_find_property( face, "RESOLUTION_X" );
>          if ( prop )
>          {
> -          if ( prop->value.ul > 0x7FFFU )
> +#ifdef FT_DEBUG_LEVEL_TRACE
> +          if ( prop->value.l < 0 )
> +            FT_TRACE0(( "pcf_load_font: negative X resolution\n" ));
> +#endif
> +          if ( FT_ABS( prop->value.l ) > 0x7FFF )
>            {
>              resolution_x = 0x7FFF;
> -            FT_TRACE0(( "pcf_load_font: clamping X resolution to value
> %hd\n",
> +            FT_TRACE0(( "pcf_load_font: clamping X resolution to value
> %d\n",
>                          resolution_x ));
>            }
>            else
> -            resolution_x = (FT_Short)prop->value.ul;
> +            resolution_x = FT_ABS( (FT_Short)prop->value.l );
>          }
>
>          prop = pcf_find_property( face, "RESOLUTION_Y" );
>          if ( prop )
>          {
> -          if ( prop->value.ul > 0x7FFFU )
> +#ifdef FT_DEBUG_LEVEL_TRACE
> +          if ( prop->value.l < 0 )
> +            FT_TRACE0(( "pcf_load_font: negative Y resolution\n" ));
> +#endif
> +          if ( FT_ABS( prop->value.l ) > 0x7FFF )
>            {
>              resolution_y = 0x7FFF;
>              FT_TRACE0(( "pcf_load_font: clamping Y resolution to value
> %d\n",
>                          resolution_y ));
>            }
>            else
> -            resolution_y = (FT_Short)prop->value.ul;
> +            resolution_y = FT_ABS( (FT_Short)prop->value.l );
>          }
>
>          if ( bsize->y_ppem == 0 )
>
>


-- 
behdad
http://behdad.org/
_______________________________________________
Freetype-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/freetype-devel

Reply via email to