MultiAudioNode: sanitize inputs
Change-Id: Ida5d74b88ec06daf738fd8b98c29737ed87c7cae Reviewed-on: https://review.haiku-os.org/c/haiku/+/3491 Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
This commit is contained in:
parent
572e0095c2
commit
a77684c96a
@ -210,6 +210,11 @@ MultiAudioNode::MultiAudioNode(BMediaAddOn* addon, const char* name,
|
|||||||
// measured in Hertz
|
// measured in Hertz
|
||||||
fOutputPreferredFormat.u.raw_audio.byte_order = B_MEDIA_HOST_ENDIAN;
|
fOutputPreferredFormat.u.raw_audio.byte_order = B_MEDIA_HOST_ENDIAN;
|
||||||
|
|
||||||
|
if (fOutputPreferredFormat.u.raw_audio.format == 0) {
|
||||||
|
fInitStatus = B_BAD_VALUE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// we'll use the consumer's preferred buffer size, if any
|
// we'll use the consumer's preferred buffer size, if any
|
||||||
fOutputPreferredFormat.u.raw_audio.buffer_size
|
fOutputPreferredFormat.u.raw_audio.buffer_size
|
||||||
= fDevice->BufferList().return_playback_buffer_size
|
= fDevice->BufferList().return_playback_buffer_size
|
||||||
@ -230,6 +235,11 @@ MultiAudioNode::MultiAudioNode(BMediaAddOn* addon, const char* name,
|
|||||||
// measured in Hertz
|
// measured in Hertz
|
||||||
fInputPreferredFormat.u.raw_audio.byte_order = B_MEDIA_HOST_ENDIAN;
|
fInputPreferredFormat.u.raw_audio.byte_order = B_MEDIA_HOST_ENDIAN;
|
||||||
|
|
||||||
|
if (fInputPreferredFormat.u.raw_audio.format == 0) {
|
||||||
|
fInitStatus = B_BAD_VALUE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// we'll use the consumer's preferred buffer size, if any
|
// we'll use the consumer's preferred buffer size, if any
|
||||||
fInputPreferredFormat.u.raw_audio.buffer_size
|
fInputPreferredFormat.u.raw_audio.buffer_size
|
||||||
= fDevice->BufferList().return_record_buffer_size
|
= fDevice->BufferList().return_record_buffer_size
|
||||||
@ -722,6 +732,12 @@ MultiAudioNode::Connected(const media_source& producer,
|
|||||||
return B_MEDIA_BAD_DESTINATION;
|
return B_MEDIA_BAD_DESTINATION;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (with_format.u.raw_audio.frame_rate <= 0
|
||||||
|
|| with_format.u.raw_audio.channel_count <= 0
|
||||||
|
|| ((with_format.u.raw_audio.format
|
||||||
|
& media_raw_audio_format::B_AUDIO_SIZE_MASK) == 0))
|
||||||
|
return B_BAD_VALUE;
|
||||||
|
|
||||||
_UpdateInternalLatency(with_format);
|
_UpdateInternalLatency(with_format);
|
||||||
|
|
||||||
// record the agreed upon values
|
// record the agreed upon values
|
||||||
@ -2322,6 +2338,9 @@ MultiAudioNode::_SetNodeInputFrameRate(float frameRate)
|
|||||||
if (error != B_OK)
|
if (error != B_OK)
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
|
if (frameRate <= 0)
|
||||||
|
return B_BAD_VALUE;
|
||||||
|
|
||||||
// it went fine -- update all formats
|
// it went fine -- update all formats
|
||||||
fOutputPreferredFormat.u.raw_audio.frame_rate = frameRate;
|
fOutputPreferredFormat.u.raw_audio.frame_rate = frameRate;
|
||||||
fOutputPreferredFormat.u.raw_audio.buffer_size
|
fOutputPreferredFormat.u.raw_audio.buffer_size
|
||||||
@ -2374,6 +2393,12 @@ MultiAudioNode::_SetNodeOutputFrameRate(float frameRate)
|
|||||||
if (error != B_OK)
|
if (error != B_OK)
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
|
if (frameRate <= 0
|
||||||
|
|| fInputPreferredFormat.u.raw_audio.channel_count <= 0
|
||||||
|
|| ((fInputPreferredFormat.u.raw_audio.format
|
||||||
|
& media_raw_audio_format::B_AUDIO_SIZE_MASK) == 0))
|
||||||
|
return B_BAD_VALUE;
|
||||||
|
|
||||||
// it went fine -- update all formats
|
// it went fine -- update all formats
|
||||||
fInputPreferredFormat.u.raw_audio.frame_rate = frameRate;
|
fInputPreferredFormat.u.raw_audio.frame_rate = frameRate;
|
||||||
fInputPreferredFormat.u.raw_audio.buffer_size
|
fInputPreferredFormat.u.raw_audio.buffer_size
|
||||||
|
Loading…
Reference in New Issue
Block a user