Fix size of memcpy in SDL_AudioDeviceFormatChangedAlreadyLocked

And add diagnostic that allows to find this kind of issue in clang-tidy
main
Mathieu Eyraud 2023-08-05 18:58:30 +02:00 committed by Ryan C. Gordon
parent 4bb426abad
commit 778e8185cd
2 changed files with 2 additions and 1 deletions

View File

@ -25,6 +25,7 @@ Checks: >
clang-analyzer-core.*, clang-analyzer-core.*,
clang-analyzer-valist.*, clang-analyzer-valist.*,
clang-analyzer-unix.Malloc, clang-analyzer-unix.Malloc,
clang-diagnostic-*,
google-readability-casting, google-readability-casting,
misc-misleading-bidirectional, misc-misleading-bidirectional,
misc-misleading-identifier, misc-misleading-identifier,

View File

@ -1681,7 +1681,7 @@ int SDL_AudioDeviceFormatChangedAlreadyLocked(SDL_AudioDevice *device, const SDL
const SDL_bool iscapture = device->iscapture; const SDL_bool iscapture = device->iscapture;
if ((device->spec.format != newspec->format) || (device->spec.channels != newspec->channels) || (device->spec.freq != newspec->freq)) { if ((device->spec.format != newspec->format) || (device->spec.channels != newspec->channels) || (device->spec.freq != newspec->freq)) {
SDL_memcpy(&device->spec, newspec, sizeof (newspec)); SDL_memcpy(&device->spec, newspec, sizeof (*newspec));
for (SDL_LogicalAudioDevice *logdev = device->logical_devices; !kill_device && (logdev != NULL); logdev = logdev->next) { for (SDL_LogicalAudioDevice *logdev = device->logical_devices; !kill_device && (logdev != NULL); logdev = logdev->next) {
for (SDL_AudioStream *stream = logdev->bound_streams; !kill_device && (stream != NULL); stream = stream->next_binding) { for (SDL_AudioStream *stream = logdev->bound_streams; !kill_device && (stream != NULL); stream = stream->next_binding) {
if (SDL_SetAudioStreamFormat(stream, iscapture ? &device->spec : NULL, iscapture ? NULL : &device->spec) == -1) { if (SDL_SetAudioStreamFormat(stream, iscapture ? &device->spec : NULL, iscapture ? NULL : &device->spec) == -1) {