[Bug]: Undefined behaviour when comparing `format->SubFormat` in WASAPI
Author: szkkngCreated Aug 10, 2026Updated Aug 10, 2026
Detailed steps on how to reproduce the bug
When running a debug build of a Standalone plugin built with Zig, the following was detected:
thread 25760 panic: reference binding to misaligned address 0x19433fe457 for type 'const GUID' (aka 'const _GUID'), which requires 4 byte alignment
C:\Users\zukke\vst-dev\juzi\examples\audio-plugin\zig-pkg\N-V-__8AAG2KgAWQaLnIKAeur76RI1tJKMF140PCwUgGQQGm\modules\juce_audio_devices\native\juce_WASAPI_windows.cpp:932: 0x7ff6facac623 in juce::WasapiClasses::WASAPIDeviceBase::tryInitialisingWithBufferSize (plugin_shared_lib.lib)
const bool isFloat = format->Format.wFormatTag == WAVE_FORMAT_EXTENSIBLE && format->SubFormat == KSDATAFORMAT_SUBTYPE_IEEE_FLOAT;What is the expected behaviour?
There should be no undefined behaviour.
Operating systems
Windows
What versions of the operating systems?
Windows 11
Architectures
x86_64
Stacktrace
thread 25760 panic: reference binding to misaligned address 0x19433fe457 for type 'const GUID' (aka 'const _GUID'), which requires 4 byte alignment
C:\Users\zukke\vst-dev\juzi\examples\audio-plugin\zig-pkg\N-V-__8AAG2KgAWQaLnIKAeur76RI1tJKMF140PCwUgGQQGm\modules\juce_audio_devices\native\juce_WASAPI_windows.cpp:932: 0x7ff6facac623 in juce::WasapiClasses::WASAPIDeviceBase::tryInitialisingWithBufferSize (plugin_shared_lib.lib)
const bool isFloat = format->Format.wFormatTag == WAVE_FORMAT_EXTENSIBLE && format->SubFormat == KSDATAFORMAT_SUBTYPE_IEEE_FLOAT;
C:\Users\zukke\vst-dev\juzi\examples\audio-plugin\zig-pkg\N-V-__8AAG2KgAWQaLnIKAeur76RI1tJKMF140PCwUgGQQGm\modules\juce_audio_devices\native\juce_WASAPI_windows.cpp:481: 0x7ff6facabdac in juce::WasapiClasses::WASAPIDeviceBase::openClient (plugin_shared_lib.lib)
if (client == nullptr || ! tryInitialisingWithBufferSize (bufferSizeSamples))
C:\Users\zukke\vst-dev\juzi\examples\audio-plugin\zig-pkg\N-V-__8AAG2KgAWQaLnIKAeur76RI1tJKMF140PCwUgGQQGm\modules\juce_audio_devices\native\juce_WASAPI_windows.cpp:957: 0x7ff6facab0d4 in juce::WasapiClasses::WASAPIInputDevice::open (plugin_shared_lib.lib)
return openClient (newSampleRate, newChannels, bufferSizeSamples)
C:\Users\zukke\vst-dev\juzi\examples\audio-plugin\zig-pkg\N-V-__8AAG2KgAWQaLnIKAeur76RI1tJKMF140PCwUgGQQGm\modules\juce_audio_devices\native\juce_WASAPI_windows.cpp:1412: 0x7ff6faca6f67 in juce::WasapiClasses::WASAPIAudioIODevice::open (plugin_shared_lib.lib)
if (inputDevice != nullptr && ! inputDevice->open (currentSampleRate, inputChannels, bufferSizeSamples))
C:\Users\zukke\vst-dev\juzi\examples\audio-plugin\zig-pkg\N-V-__8AAG2KgAWQaLnIKAeur76RI1tJKMF140PCwUgGQQGm\modules\juce_audio_devices\audio_io\juce_AudioDeviceManager.cpp:889: 0x7ff6fabf6191 in juce::AudioDeviceManager::setAudioDeviceSetup (plugin_shared_lib.lib)
error = currentAudioDevice->open (currentSetup.inputChannels,
C:\Users\zukke\vst-dev\juzi\examples\audio-plugin\zig-pkg\N-V-__8AAG2KgAWQaLnIKAeur76RI1tJKMF140PCwUgGQQGm\modules\juce_audio_devices\audio_io\juce_AudioDeviceManager.cpp:477: 0x7ff6fabf2e02 in juce::AudioDeviceManager::initialiseDefault (plugin_shared_lib.lib)
return setAudioDeviceSetup (setup, false);
C:\Users\zukke\vst-dev\juzi\examples\audio-plugin\zig-pkg\N-V-__8AAG2KgAWQaLnIKAeur76RI1tJKMF140PCwUgGQQGm\modules\juce_audio_devices\audio_io\juce_AudioDeviceManager.cpp:399: 0x7ff6fabf3dc7 in juce::AudioDeviceManager::initialise (plugin_shared_lib.lib)
return initialiseDefault (preferredDeviceName, preferredSetupOptions);
C:\Users\zukke\vst-dev\juzi\examples\audio-plugin\zig-pkg\N-V-__8AAG2KgAWQaLnIKAeur76RI1tJKMF140PCwUgGQQGm\modules\juce_audio_plugin_client\Standalone\juce_StandaloneFilterWindow.h:357: 0x7ff6f991d71e in juce::StandalonePluginHolder::reloadAudioDeviceState (juce_audio_plugin_client_Standalone.obj)
deviceManager.initialise (enableAudioInput ? inputChannels : 0,
C:\Users\zukke\vst-dev\juzi\examples\audio-plugin\zig-pkg\N-V-__8AAG2KgAWQaLnIKAeur76RI1tJKMF140PCwUgGQQGm\modules\juce_audio_plugin_client\Standalone\juce_StandaloneFilterWindow.h:601: 0x7ff6f991cfdc in juce::StandalonePluginHolder::setupAudioDevices (juce_audio_plugin_client_Standalone.obj)
reloadAudioDeviceState (enableAudioInput, preferredDefaultDeviceName, preferredSetupOptions);
C:\Users\zukke\vst-dev\juzi\examples\audio-plugin\zig-pkg\N-V-__8AAG2KgAWQaLnIKAeur76RI1tJKMF140PCwUgGQQGm\modules\juce_audio_plugin_client\Standalone\juce_StandaloneFilterWindow.h:121: 0x7ff6f9919090 in juce::StandalonePluginHolder::init (juce_audio_plugin_client_Standalone.obj)
setupAudioDevices (enableAudioInput, preferredDefaultDeviceName, options.get());
C:\Users\zukke\vst-dev\juzi\examples\audio-plugin\zig-pkg\N-V-__8AAG2KgAWQaLnIKAeur76RI1tJKMF140PCwUgGQQGm\modules\juce_audio_plugin_client\Standalone\juce_StandaloneFilterWindow.h:116: 0x7ff6f9917ddd in juce::StandalonePluginHolder::StandalonePluginHolder (juce_audio_plugin_client_Standalone.obj)
init (audioInputRequired, preferredDefaultDeviceName);
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\memory:3630: 0x7ff6f99174fd in std::make_unique<juce::StandalonePluginHolder,juce::PropertiesFile *,bool,juce::String,std::nullptr_t,const juce::Arrayjuce::StandalonePluginHolder::PluginInOuts,juce::DummyCriticalSection,0 &,const bool &,0> (juce_audio_plugin_client_Standalone.obj)
return unique_ptr<_Ty>(new _Ty(_STD forward<_Types>(_Args)...));
C:\Users\zukke\vst-dev\juzi\examples\audio-plugin\zig-pkg\N-V-__8AAG2KgAWQaLnIKAeur76RI1tJKMF140PCwUgGQQGm\modules\juce_audio_plugin_client\juce_audio_plugin_client_Standalone.cpp:121: 0x7ff6f9905217 in juce::StandaloneFilterApp::createPluginHolder (juce_audio_plugin_client_Standalone.obj)
return std::make_unique<StandalonePluginHolder> (appProperties.getUserSettings(),
C:\Users\zukke\vst-dev\juzi\examples\audio-plugin\zig-pkg\N-V-__8AAG2KgAWQaLnIKAeur76RI1tJKMF140PCwUgGQQGm\modules\juce_audio_plugin_client\juce_audio_plugin_client_Standalone.cpp:99: 0x7ff6f9904e18 in juce::StandaloneFilterApp::createWindow (juce_audio_plugin_client_Standalone.obj)
return new StandaloneFilterWindow (getApplicationName(),
C:\Users\zukke\vst-dev\juzi\examples\audio-plugin\zig-pkg\N-V-__8AAG2KgAWQaLnIKAeur76RI1tJKMF140PCwUgGQQGm\modules\juce_audio_plugin_client\juce_audio_plugin_client_Standalone.cpp:132: 0x7ff6f99041ce in juce::StandaloneFilterApp::initialise (juce_audio_plugin_client_Standalone.obj)
mainWindow = rawToUniquePtr (createWindow());
C:\Users\zukke\vst-dev\juzi\examples\audio-plugin\zig-pkg\N-V-__8AAG2KgAWQaLnIKAeur76RI1tJKMF140PCwUgGQQGm\modules\juce_events\messages\juce_ApplicationBase.cpp:312: 0x7ff6fa4a10de in juce::JUCEApplicationBase::initialiseApp (plugin_shared_lib.lib)
initialise (getCommandLineParameters());
C:\Users\zukke\vst-dev\juzi\examples\audio-plugin\zig-pkg\N-V-__8AAG2KgAWQaLnIKAeur76RI1tJKMF140PCwUgGQQGm\modules\juce_gui_basics\application\juce_Application.cpp:97: 0x7ff6fa232a34 in juce::JUCEApplication::initialiseApp (plugin_shared_lib.lib)
if (JUCEApplicationBase::initialiseApp())
C:\Users\zukke\vst-dev\juzi\examples\audio-plugin\zig-pkg\N-V-__8AAG2KgAWQaLnIKAeur76RI1tJKMF140PCwUgGQQGm\modules\juce_events\messages\juce_ApplicationBase.cpp:271: 0x7ff6fa4a0c31 in juce::JUCEApplicationBase::main (plugin_shared_lib.lib)
if (! app->initialiseApp())
C:\Users\zukke\vst-dev\juzi\examples\audio-plugin\zig-pkg\N-V-__8AAG2KgAWQaLnIKAeur76RI1tJKMF140PCwUgGQQGm\modules\juce_audio_plugin_client\juce_audio_plugin_client_Standalone.cpp:234: 0x7ff6f9902d53 in WinMain (juce_audio_plugin_client_Standalone.obj)
JUCE_MAIN_FUNCTION_DEFINITIONPlug-in formats (if applicable)
Standalone
Plug-in host applications (DAWs) (if applicable)
No response
Testing on the develop branch
The bug is present on the develop branch
Code of Conduct
- I agree to follow the Code of Conduct
Source: juce-framework/JUCE