diff --git a/extra/replace.c b/extra/replace.c
index 422cfdbac36aefd0d6814b32154b278a2df6bc33..b31b64aaff732d30297f8a59daa22f3eb8f87a5e 100644
--- a/extra/replace.c
+++ b/extra/replace.c
@@ -279,6 +279,8 @@ int insert_pointer_name(reg1 POINTER_ARRAY *pa,my_string name)
   length=(uint) strlen(name)+1;
   if (pa->length+length >= pa->max_length)
   {
+    pa->max_length=(pa->length+length+MALLOC_OVERHEAD+PS_MALLOC-1)/PS_MALLOC;
+    pa->max_length=pa->max_length*PS_MALLOC-MALLOC_OVERHEAD;
     if (!(new_pos= (byte*) my_realloc((gptr) pa->str,
 				      (uint) (pa->max_length+PS_MALLOC),
 				      MYF(MY_WME))))
@@ -291,7 +293,6 @@ int insert_pointer_name(reg1 POINTER_ARRAY *pa,my_string name)
 					      char*);
       pa->str=new_pos;
     }
-    pa->max_length+=PS_MALLOC;
   }
   if (pa->typelib.count >= pa->max_count-1)
   {