X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=cmdutils.c;h=c158de36e8a25cb173d7b6079a43f3fce4fa1597;hb=d94c577d3c61e428cfcbcd3dc3a80bd848077eae;hp=ade3f10ce2fc030e32e375a85fbd06c26d43a433;hpb=7d1b17b83330aefe2f32a66fe84effe46ae51014;p=ffmpeg diff --git a/cmdutils.c b/cmdutils.c index ade3f10ce2f..c158de36e8a 100644 --- a/cmdutils.c +++ b/cmdutils.c @@ -787,6 +787,7 @@ int read_yesno(void) int read_file(const char *filename, char **bufptr, size_t *size) { + int ret; FILE *f = fopen(filename, "rb"); if (!f) { @@ -802,11 +803,22 @@ int read_file(const char *filename, char **bufptr, size_t *size) fclose(f); return AVERROR(ENOMEM); } - fread(*bufptr, 1, *size, f); - (*bufptr)[*size++] = '\0'; + ret = fread(*bufptr, 1, *size, f); + if (ret < *size) { + av_free(*bufptr); + if (ferror(f)) { + av_log(NULL, AV_LOG_ERROR, "Error while reading file '%s': %s\n", + filename, strerror(errno)); + ret = AVERROR(errno); + } else + ret = AVERROR_EOF; + } else { + ret = 0; + (*bufptr)[*size++] = '\0'; + } fclose(f); - return 0; + return ret; } void init_pts_correction(PtsCorrectionContext *ctx)