lavd/alsa: add stream validation
authorLukasz Marek <lukasz.m.luki@gmail.com>
Fri, 25 Oct 2013 23:32:55 +0000 (01:32 +0200)
committerNicolas George <george@nsup.org>
Sun, 3 Nov 2013 09:28:15 +0000 (10:28 +0100)
Don't trust provided streams.
Return with error when stream count is not 1 or
provided stream is not an audio stream.

Signed-off-by: Lukasz Marek <lukasz.m.luki@gmail.com>
libavdevice/alsa-audio-enc.c

index 5033a48..83e1d2f 100644 (file)
 static av_cold int audio_write_header(AVFormatContext *s1)
 {
     AlsaData *s = s1->priv_data;
 static av_cold int audio_write_header(AVFormatContext *s1)
 {
     AlsaData *s = s1->priv_data;
-    AVStream *st;
+    AVStream *st = NULL;
     unsigned int sample_rate;
     enum AVCodecID codec_id;
     int res;
 
     unsigned int sample_rate;
     enum AVCodecID codec_id;
     int res;
 
+    if (s1->nb_streams != 1 || s1->streams[0]->codec->codec_type != AVMEDIA_TYPE_AUDIO) {
+        av_log(s1, AV_LOG_ERROR, "Only a single audio stream is supported.\n");
+        return AVERROR(EINVAL);
+    }
     st = s1->streams[0];
     st = s1->streams[0];
+
     sample_rate = st->codec->sample_rate;
     codec_id    = st->codec->codec_id;
     res = ff_alsa_open(s1, SND_PCM_STREAM_PLAYBACK, &sample_rate,
     sample_rate = st->codec->sample_rate;
     codec_id    = st->codec->codec_id;
     res = ff_alsa_open(s1, SND_PCM_STREAM_PLAYBACK, &sample_rate,