From a59cae21c476e89af86db8a90081a0b9d21fe021 Mon Sep 17 00:00:00 2001 From: norgera Date: Sat, 27 Jul 2024 12:30:07 -0400 Subject: [PATCH] Added error handling for malloc and strdup --- ggml/src/ggml-backend.c | 6 ++++++ ggml/src/ggml-kompute.cpp | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/ggml/src/ggml-backend.c b/ggml/src/ggml-backend.c index 954ab2072..0ebef2e68 100644 --- a/ggml/src/ggml-backend.c +++ b/ggml/src/ggml-backend.c @@ -60,6 +60,12 @@ GGML_CALL ggml_backend_buffer_t ggml_backend_buffer_init( size_t size) { ggml_backend_buffer_t buffer = malloc(sizeof(struct ggml_backend_buffer)); + if (buffer == NULL) { + // Log the error and handle appropriately + fprintf(stderr, "Memory allocation failed in ggml_backend_buffer_init\n"); + return NULL; // or handle the error as appropriate + } + (*buffer) = (struct ggml_backend_buffer) { /* .interface = */ iface, /* .buft = */ buft, diff --git a/ggml/src/ggml-kompute.cpp b/ggml/src/ggml-kompute.cpp index 41ac63fa4..b4dcad9c1 100644 --- a/ggml/src/ggml-kompute.cpp +++ b/ggml/src/ggml-kompute.cpp @@ -238,6 +238,11 @@ static std::vector ggml_vk_available_devices_internal(size_t mem d.type = dev_props.deviceType; d.heapSize = heapSize; d.vendor = strdup(ggml_vk_getVendorName(dev_props.vendorID)); + if (d.vendor == NULL) { + // Handle strdup failure + std::cerr << __func__ << ": strdup failed for vendor name\n"; + continue; // or handle the error as appropriate + } d.subgroupSize = subgroup_props.subgroupSize; d.bufferAlignment = dev_props.limits.minStorageBufferOffsetAlignment; @@ -253,6 +258,12 @@ static std::vector ggml_vk_available_devices_internal(size_t mem name += " (" + std::to_string(n_idx) + ")"; } d.name = strdup(name.c_str()); + if (d.name == NULL) { + // Handle strdup failure + std::cerr << __func__ << ": strdup failed for device name\n"; + free(d.vendor); // Clean up the previously allocated vendor name + continue; // or handle the error as appropriate + } results.push_back(d); }