From cf9be31ce11be42715f07e1cd634798fbdb635d0 Mon Sep 17 00:00:00 2001 From: Charles the Thobe Date: Wed, 25 Mar 2026 15:36:46 +0200 Subject: [PATCH] CoreMIDIDevice: Fix potential crash when enumerating device names --- source/zmusic/configuration.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/source/zmusic/configuration.cpp b/source/zmusic/configuration.cpp index de125a7..2d13e97 100644 --- a/source/zmusic/configuration.cpp +++ b/source/zmusic/configuration.cpp @@ -251,16 +251,27 @@ struct MidiDeviceList } } #elif __APPLE__ - for (int i = 0; i < MIDIGetNumberOfDestinations(); i++) + CFStringRef cfName; + char string_buffer[128]; + auto destCount = MIDIGetNumberOfDestinations(); + for (int i = 0; i < destCount; i++) { - uint32_t endpoint = MIDIGetDestination(i); + auto endpoint = MIDIGetDestination(i); if (!endpoint) { continue; } - CFStringRef cfName; + cfName = nullptr; MIDIObjectGetStringProperty(endpoint, kMIDIPropertyName, &cfName); - devices.push_back({ strdup(CFStringGetCStringPtr(cfName, kCFStringEncodingUTF8)), i, MIDIDEV_MAPPER }); + if (!CFStringGetCString(cfName, string_buffer, sizeof(string_buffer), kCFStringEncodingUTF8)) + { + strcpy(string_buffer, "CoreMidi device"); + } + if (cfName != nullptr) + { + CFRelease(cfName); + } + devices.push_back({ strdup(string_buffer), i, MIDIDEV_MAPPER }); } #endif #endif