From 3055c1266deddc045fe490795ed2f54ce27f8cd2 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 8 Jun 2019 11:51:15 +0200 Subject: [PATCH] output/osx: don't use variable-length arrays --- src/output/plugins/OSXOutputPlugin.cxx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/output/plugins/OSXOutputPlugin.cxx b/src/output/plugins/OSXOutputPlugin.cxx index 5a3f763d3..02b9c8021 100644 --- a/src/output/plugins/OSXOutputPlugin.cxx +++ b/src/output/plugins/OSXOutputPlugin.cxx @@ -390,7 +390,11 @@ osx_output_set_device_format(AudioDeviceID dev_id, const AudioStreamBasicDescrip } const size_t n_streams = property_size / sizeof(AudioStreamID); - AudioStreamID streams[n_streams]; + static constexpr size_t MAX_STREAMS = 64; + if (n_streams > MAX_STREAMS) + throw std::runtime_error("Too many streams"); + + AudioStreamID streams[MAX_STREAMS]; err = AudioObjectGetPropertyData(dev_id, &aopa, 0, NULL, &property_size, streams); if (err != noErr) { throw FormatRuntimeError("Cannot get streams: %d\n", err); @@ -424,7 +428,11 @@ osx_output_set_device_format(AudioDeviceID dev_id, const AudioStreamBasicDescrip throw FormatRuntimeError("Unable to get format size s for stream %d. Error = %s", streams[i], err); const size_t format_count = property_size / sizeof(AudioStreamRangedDescription); - AudioStreamRangedDescription format_list[format_count]; + static constexpr size_t MAX_FORMATS = 256; + if (format_count > MAX_FORMATS) + throw std::runtime_error("Too many formats"); + + AudioStreamRangedDescription format_list[MAX_FORMATS]; err = AudioObjectGetPropertyData(stream, &aopa, 0, NULL, &property_size, format_list); if (err != noErr) throw FormatRuntimeError("Unable to get available formats for stream %d. Error = %s", streams[i], err);