Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix a stack corruption when xbt_dynar_remove_at was used with object larger than...
authormquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Thu, 6 Jul 2006 01:48:07 +0000 (01:48 +0000)
committermquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Thu, 6 Jul 2006 01:48:07 +0000 (01:48 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@2489 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/xbt/dynar.c

index 923b90e..eeb022e 100644 (file)
@@ -374,9 +374,16 @@ xbt_dynar_remove_at(xbt_dynar_t  const dynar,
   if (object) {
     _xbt_dynar_get_elm(object, dynar, idx);
   } else if (dynar->free_f) {
-    char elm[SIZEOF_MAX];
-    _xbt_dynar_get_elm(elm, dynar, idx);
-    (*dynar->free_f)(elm);
+    if (dynar->elmsize <= SIZEOF_MAX) {
+       char elm[SIZEOF_MAX];
+       _xbt_dynar_get_elm(elm, dynar, idx);
+       (*dynar->free_f)(elm);
+    } else {
+       char *elm=malloc(dynar->elmsize);
+       _xbt_dynar_get_elm(elm, dynar, idx);
+       (*dynar->free_f)(elm);
+       free(elm);
+    }
   }
 
   nb_shift =  dynar->used-1 - idx;