From de7af9185e172122cd9b800845e1988a52ad7cc3 Mon Sep 17 00:00:00 2001 From: Henrik Gramner Date: Fri, 5 Feb 2016 18:46:02 +0100 Subject: [PATCH] parse_qpfile: Check ftell() and fseek() return values --- x264.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/x264.c b/x264.c index 8413c7cd..18a3e369 100644 --- a/x264.c +++ b/x264.c @@ -1741,19 +1741,23 @@ generic_option: static void parse_qpfile( cli_opt_t *opt, x264_picture_t *pic, int i_frame ) { - int num = -1, qp, ret; + int num = -1; char type; - uint64_t file_pos; while( num < i_frame ) { - file_pos = ftell( opt->qpfile ); - qp = -1; - ret = fscanf( opt->qpfile, "%d %c%*[ \t]%d\n", &num, &type, &qp ); + int64_t file_pos = ftell( opt->qpfile ); + int qp = -1; + int ret = fscanf( opt->qpfile, "%d %c%*[ \t]%d\n", &num, &type, &qp ); pic->i_type = X264_TYPE_AUTO; pic->i_qpplus1 = X264_QP_AUTO; if( num > i_frame || ret == EOF ) { - fseek( opt->qpfile, file_pos, SEEK_SET ); + if( file_pos < 0 || fseek( opt->qpfile, file_pos, SEEK_SET ) ) + { + x264_cli_log( "x264", X264_LOG_ERROR, "qpfile seeking failed\n" ); + fclose( opt->qpfile ); + opt->qpfile = NULL; + } break; } if( num < i_frame && ret >= 2 ) -- 2.39.2