forked from FFmpeg/FFmpeg
avdevice/avfoundation: check strdup
This commit is contained in:
parent
6b708592fa
commit
079de49912
1 changed files with 10 additions and 2 deletions
|
@ -310,18 +310,21 @@ static void destroy_context(AVFContext* ctx)
|
|||
}
|
||||
}
|
||||
|
||||
static void parse_device_name(AVFormatContext *s)
|
||||
static int parse_device_name(AVFormatContext *s)
|
||||
{
|
||||
AVFContext *ctx = (AVFContext*)s->priv_data;
|
||||
ctx->url = av_strdup(s->url);
|
||||
char *save;
|
||||
|
||||
if (!ctx->url)
|
||||
return AVERROR(ENOMEM);
|
||||
if (ctx->url[0] != ':') {
|
||||
ctx->video_filename = av_strtok(ctx->url, ":", &save);
|
||||
ctx->audio_filename = av_strtok(NULL, ":", &save);
|
||||
} else {
|
||||
ctx->audio_filename = av_strtok(ctx->url, ":", &save);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -760,6 +763,7 @@ static int get_audio_config(AVFormatContext *s)
|
|||
|
||||
static int avf_read_header(AVFormatContext *s)
|
||||
{
|
||||
int ret = 0;
|
||||
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||
uint32_t num_screens = 0;
|
||||
AVFContext *ctx = (AVFContext*)s->priv_data;
|
||||
|
@ -812,7 +816,9 @@ static int avf_read_header(AVFormatContext *s)
|
|||
}
|
||||
|
||||
// parse input filename for video and audio device
|
||||
parse_device_name(s);
|
||||
ret = parse_device_name(s);
|
||||
if (ret)
|
||||
goto fail;
|
||||
|
||||
// check for device index given in filename
|
||||
if (ctx->video_device_index == -1 && ctx->video_filename) {
|
||||
|
@ -1002,6 +1008,8 @@ static int avf_read_header(AVFormatContext *s)
|
|||
fail:
|
||||
[pool release];
|
||||
destroy_context(ctx);
|
||||
if (ret)
|
||||
return ret;
|
||||
return AVERROR(EIO);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue