]> granicus.if.org Git - graphviz/commitdiff
pathplan: replace unchecked allocation calls with cgraph wrappers
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Mon, 26 Dec 2022 05:41:23 +0000 (21:41 -0800)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Sun, 8 Jan 2023 20:53:25 +0000 (12:53 -0800)
After the prior UB fixes, the #1999 example bottoms out in this code, failing
the second allocation call while trying to allocate ~938GB. The return values
for neither of these calls were checked, resulting in messy crashes when
scenarios like this occurred. This change swaps them for calls to the cgraph
allocation wrappers that exit gracefully on out-of-memory conditions.

Gitlab: #1999

lib/pathplan/visibility.c

index 52d21bf2ddf9476da3b185457bcd4a6150621167..7294708e29e95c102a5ea597d4f49071647fa3d5 100644 (file)
@@ -9,6 +9,7 @@
  *************************************************************************/
 
 #include <assert.h>
+#include <cgraph/alloc.h>
 #include <pathplan/vis.h>
 #include <stdbool.h>
 #include <stdlib.h>
 static array2 allocArray(int V, int extra)
 {
     int i;
-    array2 arr;
-    COORD *p;
 
     assert(V >= 0);
-    arr = malloc((V + extra) * sizeof(COORD *));
-    p = calloc((size_t)V * (size_t)V, sizeof(COORD));
+    array2 arr = gv_calloc(V + extra, sizeof(COORD*));
+    COORD *p = gv_calloc((size_t)V * (size_t)V, sizeof(COORD));
     for (i = 0; i < V; i++) {
        arr[i] = p;
        p += V;