* src/psaux/psobjs.c (shift_elements): Remove if clause (which is
obsolete now).

(reallocate_t1_table, PS_Table_Done): Replace REALLOC() with ALLOC()
+ MEM_Copy() to avoid a memory bug.
diff --git a/ChangeLog b/ChangeLog
index 6d7ae8c..568580a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2001-02-02  Werner Lemberg  <wl@gnu.org>
+
+	* src/psaux/psobjs.c (shift_elements): Remove if clause (which is
+	obsolete now).
+
+	(reallocate_t1_table, PS_Table_Done): Replace REALLOC() with ALLOC()
+	+ MEM_Copy() to avoid a memory bug.
+
 2001-02-01  David Turner  <david.turner@freetype.org>
 
 	* docs/docmaker.py: Improved the index sorting routine to place
diff --git a/src/psaux/psobjs.c b/src/psaux/psobjs.c
index 3f51e2b..3759d99 100644
--- a/src/psaux/psobjs.c
+++ b/src/psaux/psobjs.c
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    Auxiliary functions for PostScript fonts (body).                     */
 /*                                                                         */
-/*  Copyright 1996-2000 by                                                 */
+/*  Copyright 1996-2001 by                                                 */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -89,12 +89,11 @@
     FT_Byte**  limit  = offset + table->max_elems;
 
 
-    if ( delta )
-      for ( ; offset < limit; offset++ )
-      {
-        if ( offset[0] )
-          offset[0] += delta;
-      }
+    for ( ; offset < limit; offset++ )
+    {
+      if ( offset[0] )
+        offset[0] += delta;
+    }
   }
 
 
@@ -107,15 +106,19 @@
     FT_Error   error;
 
 
-    /* reallocate the base block */
-    if ( REALLOC( table->block, table->capacity, new_size ) )
+    /* allocate new base block */
+    if ( ALLOC( table->block, new_size ) )
       return error;
 
-    table->capacity = new_size;
-
-    /* shift all offsets if necessary */
-    if ( old_base )
+    /* copy elements and shift offsets */
+    if (old_base )
+    {
+      MEM_Copy( table->block, old_base, table->capacity );
       shift_elements( table, old_base );
+      FREE( old_base );
+    }
+
+    table->capacity = new_size;
 
     return FT_Err_Ok;
   }
@@ -200,20 +203,20 @@
   {
     FT_Memory  memory = table->memory;
     FT_Error   error;
-    FT_Byte*   old_base;
+    FT_Byte*   old_base = table->block;
 
 
     /* should never fail, because rec.cursor <= rec.size */
-    old_base = table->block;
     if ( !old_base )
       return;
 
-    if ( REALLOC( table->block, table->capacity, table->cursor ) )
+    if ( ALLOC( table->block, table->cursor ) )
       return;
-    table->capacity = table->cursor;
+    MEM_Copy( table->block, old_base, table->cursor );
+    shift_elements( table, old_base );
 
-    if ( old_base != table->block )
-      shift_elements( table, old_base );
+    table->capacity = table->cursor;
+    FREE( old_base );
   }