avdevice/avfoundation: check strdup

release/5.1
Zhao Zhili 3 years ago committed by Thilo Borgmann
parent 6b708592fa
commit 079de49912
  1. 12
      libavdevice/avfoundation.m

@ -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…
Cancel
Save