From 6e835b566227980711cda6179f4b4b1d6a5dc4a0 Mon Sep 17 00:00:00 2001
From: Leon Medvinsky <leonkm2@illinois.edu>
Date: Sat, 3 Apr 2021 23:50:55 -0500
Subject: [PATCH] Make hpvm-cava allocate file paths dynamically

---
 hpvm/test/benchmarks/hpvm-cava/src/main.c | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/hpvm/test/benchmarks/hpvm-cava/src/main.c b/hpvm/test/benchmarks/hpvm-cava/src/main.c
index 0d8fb37d01..35fc638080 100644
--- a/hpvm/test/benchmarks/hpvm-cava/src/main.c
+++ b/hpvm/test/benchmarks/hpvm-cava/src/main.c
@@ -12,6 +12,9 @@
 
 #include "hpvm.h"
 
+// Max file extension size
+#define MAX_EXT_SIZE 20
+
 int NUM_TEST_CASES;
 int NUM_CLASSES;
 int INPUT_DIM;
@@ -875,29 +878,33 @@ int main(int argc, char *argv[]) {
 
   // Output the image.
   // NOTE: We deliberately perform this file I/O outside of the kernel.
-  char str[50], base_str[50];
+  const int len = strlen(args.args[OUTPUT_IMAGE_BIN]);
+  const char *base_str = args.args[OUTPUT_IMAGE_BIN];
+  char *str = malloc(sizeof(char)*len + MAX_EXT_SIZE + 1); // Handles the extensions below
   strcpy(base_str, args.args[OUTPUT_IMAGE_BIN]);
   strcpy(str, base_str);
-  strcat(str, ".bin");
+  strncat(str, ".bin", MAX_EXT_SIZE);
   printf("Writing output image to %s\n", str);
   write_image_to_binary(str, image_out, row_size, col_size);
   strcpy(str, base_str);
-  strcat(str, "_gamut.bin");
+  strncat(str, "_gamut.bin", MAX_EXT_SIZE);
   printf("Writing output image to %s\n", str);
   write_image_to_binary(str, image_out_gamut, row_size, col_size);
   strcpy(str, base_str);
-  strcat(str, "_demosaic.bin");
+  strncat(str, "_demosaic.bin", MAX_EXT_SIZE);
   printf("Writing output image to %s\n", str);
   write_image_to_binary(str, image_out_demosaic, row_size, col_size);
   strcpy(str, base_str);
-  strcat(str, "_denoise.bin");
+  strncat(str, "_denoise.bin", MAX_EXT_SIZE);
   printf("Writing output image to %s\n", str);
   write_image_to_binary(str, image_out_denoise, row_size, col_size);
   strcpy(str, base_str);
-  strcat(str, "_transform.bin");
+  strncat(str, "_transform.bin", MAX_EXT_SIZE);
   printf("Writing output image to %s\n", str);
   write_image_to_binary(str, image_out_transform, row_size, col_size);
 
+  free(str);
+
   __hpvm__cleanup();
 
   return 0;
-- 
GitLab