]> granicus.if.org Git - graphviz/commitdiff
diffimg: handle allocation errors
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Sat, 19 Feb 2022 18:21:02 +0000 (10:21 -0800)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Mon, 21 Feb 2022 00:49:26 +0000 (16:49 -0800)
Previously these would be ignored resulting in crashes when allocations failed.

contrib/diffimg/diffimg.c

index 3af05d2df3a59d14f29da56a4741c964f5579a86..52ecb98bff86505e0e26faae4a9dc8fcc02ba616 100644 (file)
@@ -33,6 +33,7 @@
 #define EX_DATAERR             65
 #define EX_NOINPUT             66
 #define EX_UNAVAILABLE 69
+#define EX_OSERR       71
 #else
 #include <sysexits.h>
 #endif
 
 static char *pstopng="gs -dNOPAUSE -sDEVICE=pngalpha -sOutputFile=- -q -";
 
+static void *xmalloc(size_t size) {
+  void *p = malloc(size);
+  if (size > 0 && p == NULL) {
+    fprintf(stderr, "Out of memory\n");
+    graphviz_exit(EX_OSERR);
+  }
+  return p;
+}
+
 static gdImagePtr imageLoad (char *filename)
 {
     FILE *f;
@@ -63,11 +73,11 @@ static gdImagePtr imageLoad (char *filename)
     }
     if (strcasecmp(ext, ".ps") == 0) {
        ext = ".png";
-       tmp = malloc(strlen(filename) + strlen(ext) + 1);
+       tmp = xmalloc(strlen(filename) + strlen(ext) + 1);
        strcpy(tmp,filename);
        strcat(tmp,ext);
        
-       cmd = malloc(strlen(pstopng) + 2 + strlen(filename) + 2 + strlen(tmp) + 1);
+       cmd = xmalloc(strlen(pstopng) + 2 + strlen(filename) + 2 + strlen(tmp) + 1);
        strcpy(cmd,pstopng);
        strcat(cmd," <");
        strcat(cmd,filename);