Jinoh Kang (@iamahuman) commented about dlls/windows.media.speech/recognizer.c:
}else if (old_paused > paused){IAudioClient_Start(impl->audio_client);TRACE("session worker resumed.\n");}}else if (status == 1) /* audio_buf_event signaled */{UINT32 frames_available = 0, tmp_buf_offset = 0;SIZE_T packet_size = frames_available * impl->capture_wfx.nBlockAlign;while (tmp_buf_offset < tmp_buf_size&& IAudioCaptureClient_GetBuffer(impl->capture_client, &audio_buf, &frames_available, &flags, NULL, NULL) == S_OK){if (tmp_buf_offset + packet_size > tmp_buf_size)
Verbose explanation (you're probably already aware of this): `packet_size` is always 0. `packet_size` should be the size for the current packet. The expression `frames_available * impl->capture_wfx.nBlockAlign` should be evalulated only after `frames_available` is assigned a meaningful value.
```suggestion:-0+0 SIZE_T packet_size = frames_available * impl->capture_wfx.nBlockAlign;
if (tmp_buf_offset + packet_size > tmp_buf_size) ```
My guess is that you wanted to move `packet_size` declaration out of the loop, but while doing so, you accidentally took the initializer expression with it as well. In this case, you can say:
```suggestion:-0+0 packet_size = frames_available * impl->capture_wfx.nBlockAlign;
if (tmp_buf_offset + packet_size > tmp_buf_size) ```