ref: 1c8980ef4a6b8a5d1f3a4828dbb2b9deda203d76
parent: 6ff2ff574b7cf317646ce4fbbdd4b5f604b04525
author: Werner Lemberg <[email protected]>
date: Fri May 25 03:11:12 EDT 2007
* docs/CHANGES: Updated. Formatting.
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2007-05-25 Werner Lemberg <[email protected]>
+
+ * docs/CHANGES: Updated.
+
2007-05-24 Werner Lemberg <[email protected]>
* src/truetype/ttobjs.h (tt_size_ready_bytecode): Move declaration
@@ -10,13 +14,22 @@
2007-05-22 David Turner <[email protected]>
- * src/truetype/ttgload.c: fix Werner's recent graphics state
- patch to avoid crashes when we don't use the bytecode interpreter !
+ * src/truetype/ttgload.c (load_truetype_glyph): Fix last change to
+ avoid crashes in case the bytecode interpreter is not used.
- * src/lzw/ftzopen.h, src/lzw/ftzopen.c: fix for bug #19910
- (heap blowup with very large .Z font file). The .Z format is
- *really* crappy :-(
+ Avoid heap blowup with very large .Z font files. This fixes
+ Savannah bug #19910.
+
+ * src/lzw/ftzopen.h (FT_LzwStateRec): Remove `in_cursor',
+ `in_limit', `pad', `pad_bits', and `in_buff' members.
+ Add `buf_tab', `buf_offset', `buf_size', `buf_clear', and
+ `buf_total' members.
+
+ * src/lzw/ftzopen.c (ft_lzwstate_get_code): Rewritten. It now takes
+ only one argument.
+ (ft_lzwstate_refill, ft_lzwstate_reset, ft_lzwstate_io): Updated.
+
2007-05-20 Ismail Dönmez <[email protected]>
* src/pshinter/pshrec.c (ps_mask_table_set_bits): Add `const'.
@@ -154,8 +167,8 @@
2007-04-25 Boris Letocha <[email protected]>
- * src/truetype/ttobjs.c: fix a typo that created a speed regression
- in the TrueType bytecode loader
+ * src/truetype/ttobjs.c: Fix a typo that created a speed regression
+ in the TrueType bytecode loader.
2007-04-10 Martin Horak <[email protected]>
--- a/docs/CHANGES
+++ b/docs/CHANGES
@@ -6,8 +6,17 @@
- Some subglyphs in TrueType fonts were handled incorrectly due to
a missing graphics state reinitialization.
+ - Large .Z files (as distributed with some X11 packages) weren't
+ handled correctly, making FreeType increase the heap stack in an
+ endless loop.
+
II. IMPORTANT CHANGES
+
+ - The two new cache functions `FTC_ImageCache_LookupScaler' and
+ `FTC_SBit_Cache_LookupScaler' have been added to allow lookup of
+ glyphs using an `FTC_Scaler' object; this makes it possible to
+ use fractional pixel sizes in the cache.
- A new API `FT_Get_CMap_Format)' has been added to get the cmap
format of a TrueType font. This is useful in handling PDF
--- a/src/lzw/ftzopen.c
+++ b/src/lzw/ftzopen.c
@@ -8,7 +8,7 @@
/* be used to parse compressed PCF fonts, as found with many X11 server */
/* distributions. */
/* */
-/* Copyright 2005, 2006 by David Turner. */
+/* Copyright 2005, 2006, 2007 by David Turner. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
@@ -23,25 +23,27 @@
#include FT_INTERNAL_STREAM_H
#include FT_INTERNAL_DEBUG_H
+
static int
ft_lzwstate_refill( FT_LzwState state )
{
FT_ULong count;
- if (state->in_eof)
+
+ if ( state->in_eof )
return -1;
count = FT_Stream_TryRead( state->source,
state->buf_tab,
- state->num_bits ); /* WHY ?? */
+ state->num_bits ); /* WHY? */
- state->buf_size = (FT_UInt) count;
+ state->buf_size = (FT_UInt)count;
state->buf_total += count;
state->in_eof = FT_BOOL( count < state->num_bits );
state->buf_offset = 0;
- state->buf_size = (state->buf_size << 3) - (state->num_bits-1);
+ state->buf_size = ( state->buf_size << 3 ) - ( state->num_bits - 1 );
- if (count == 0) /* end of file */
+ if ( count == 0 ) /* end of file */
return -1;
return 0;
@@ -63,10 +65,10 @@
{
if ( state->free_ent >= state->free_bits )
{
- state->num_bits = ++num_bits;
+ state->num_bits = ++num_bits;
state->free_bits = state->num_bits < state->max_bits
- ? (FT_UInt)( ( 1UL << num_bits ) - 256 )
- : state->max_free + 1;
+ ? (FT_UInt)( ( 1UL << num_bits ) - 256 )
+ : state->max_free + 1;
}
if ( state->buf_clear )
@@ -87,22 +89,22 @@
p = &state->buf_tab[offset >> 3];
offset &= 7;
result = *p++ >> offset;
- offset = 8-offset;
+ offset = 8 - offset;
num_bits -= offset;
- if (num_bits >= 8)
+
+ if ( num_bits >= 8 )
{
result |= *p++ << offset;
offset += 8;
num_bits -= 8;
}
- if (num_bits > 0)
- result |= (*p & LZW_MASK(num_bits)) << offset;
+ if ( num_bits > 0 )
+ result |= ( *p & LZW_MASK( num_bits ) ) << offset;
return result;
}
-
/* grow the character stack */
static int
ft_lzwstate_stack_grow( FT_LzwState state )
@@ -173,14 +175,14 @@
FT_LOCAL_DEF( void )
ft_lzwstate_reset( FT_LzwState state )
{
- state->in_eof = 0;
+ state->in_eof = 0;
state->buf_offset = 0;
state->buf_size = 0;
state->buf_clear = 0;
state->buf_total = 0;
- state->stack_top = 0;
- state->num_bits = LZW_INIT_BITS;
- state->phase = FT_LZW_PHASE_START;
+ state->stack_top = 0;
+ state->num_bits = LZW_INIT_BITS;
+ state->phase = FT_LZW_PHASE_START;
}
@@ -222,13 +224,13 @@
}
-#define FTLZW_STACK_PUSH( c ) \
- FT_BEGIN_STMNT \
- if ( state->stack_top >= state->stack_size && \
- ft_lzwstate_stack_grow( state ) < 0 ) \
- goto Eof; \
- \
- state->stack[ state->stack_top++ ] = (FT_Byte)(c); \
+#define FTLZW_STACK_PUSH( c ) \
+ FT_BEGIN_STMNT \
+ if ( state->stack_top >= state->stack_size && \
+ ft_lzwstate_stack_grow( state ) < 0 ) \
+ goto Eof; \
+ \
+ state->stack[state->stack_top++] = (FT_Byte)(c); \
FT_END_STMNT
@@ -268,7 +270,8 @@
goto Eof;
state->num_bits = LZW_INIT_BITS;
- state->free_ent = ( state->block_mode ? LZW_FIRST : LZW_CLEAR ) - 256;
+ state->free_ent = ( state->block_mode ? LZW_FIRST
+ : LZW_CLEAR ) - 256;
in_code = 0;
state->free_bits = state->num_bits < state->max_bits
@@ -306,7 +309,8 @@
if ( code == LZW_CLEAR && state->block_mode )
{
- state->free_ent = ( LZW_FIRST - 1 ) - 256; /* why not LZW_FIRST-256 ? */
+ /* why not LZW_FIRST-256 ? */
+ state->free_ent = ( LZW_FIRST - 1 ) - 256;
state->buf_clear = 1;
c = ft_lzwstate_get_code( state );
if ( c < 0 )
--- a/src/lzw/ftzopen.h
+++ b/src/lzw/ftzopen.h
@@ -8,7 +8,7 @@
/* be used to parse compressed PCF fonts, as found with many X11 server */
/* distributions. */
/* */
-/* Copyright 2005, 2006 by David Turner. */
+/* Copyright 2005, 2006, 2007 by David Turner. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
--- a/src/truetype/ttgload.c
+++ b/src/truetype/ttgload.c
@@ -1384,10 +1384,10 @@
TT_GraphicsState saved_GS;
- if (loader->exec)
+
+ if ( loader->exec )
saved_GS = loader->exec->GS;
-
FT_GlyphLoader_Add( gloader );
/* read each subglyph independently */
@@ -1397,7 +1397,7 @@
/* reinitialize graphics state */
- if (loader->exec)
+ if ( loader->exec )
loader->exec->GS = saved_GS;
/* Each time we call load_truetype_glyph in this loop, the */