fix a segfault on del
authorLaurent Mazet <laurent.mazet@thalesgroup.com>
Tue, 14 Feb 2023 12:57:51 +0000 (13:57 +0100)
committerLaurent Mazet <laurent.mazet@thalesgroup.com>
Tue, 14 Feb 2023 12:57:51 +0000 (13:57 +0100)
program.c

index e8cd2d1301379c1f6efffebafaa7985b258f67bf..ef6d833be6c1ca651008d69a183cab3ee294747f 100644 (file)
--- a/program.c
+++ b/program.c
@@ -167,13 +167,10 @@ void del (int id)
     free_ws (programs[n]);
 
     /* remove entry */
-    workspace_t **tmp = (workspace_t **) callocordie (--nb_programs, sizeof (workspace_t *));
-    if (n != 0) {
-        memcpy (tmp, programs, (n - 1) * sizeof (workspace_t));
-    }
-    if (n != nb_programs) {
-        memcpy (tmp + n - 1, programs + n, (nb_programs - n) * sizeof (workspace_t));
-    }
+    workspace_t **tmp = (workspace_t **) callocordie (nb_programs - 1, sizeof (workspace_t *));
+    memcpy (tmp, programs, n * sizeof (workspace_t *));
+    memcpy (tmp + n, programs + n + 1, (nb_programs - n - 1) * sizeof (workspace_t *));
+    nb_programs--;
     free (programs);
     programs = tmp;
 }