On Friday 01 June 2007 13:39:32 Mehmet Yavuz Selim Soyturk wrote:

> Function mmd_expand_y in src/mmd.c allocates new memory for the mmd
> table, but does not initialize the newy allocated memory to NULL,
> which causes segfaults for some cases. The attached patch solves that
> problem.

I thought that might happen.  I prefer this memset() patch, but if it doesn't 
work everywhere, your patch should work.

-- c

=== src/mmd.c
==================================================================
--- src/mmd.c	(revision 3732)
+++ src/mmd.c	(local)
@@ -623,19 +623,22 @@
 static void
 mmd_expand_y(Interp *interp, INTVAL func_nr, INTVAL new_y)
 {
-    funcptr_t *new_table;
-    UINTVAL    new_size;
+    UINTVAL    new_size, i, x, y;
     MMD_table * const table = interp->binop_mmd_funcs + func_nr;
 
     assert(table->x);
 
-    new_size = sizeof (funcptr_t) * table->x * new_y;
+    x        = table->x;
+    y        = table->y;
+    new_size = sizeof (funcptr_t) * x * new_y;
 
     if (table->mmd_funcs)
         table->mmd_funcs = mem_sys_realloc(table->mmd_funcs, new_size);
     else
         table->mmd_funcs = (funcptr_t *)mem_sys_allocate(new_size);
 
+    memset(table->mmd_funcs + x * y, 0, x * (new_y - y));
+
     table->y = new_y;
 }
 

Reply via email to