Skip to content

[Bug]: Undefined behaviour when comparing format->SubFormat in WASAPI #1700

Description

@szkkng

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_DEFINITION

Plug-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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions