Skip to content

Commit c838aea

Browse files
author
Clement Champetier
committed
Common: fix out-of-bounds access in setters functions of ParamSet
* Avoid const_cast. * Same way in all AvTranscoder to get the FFmpeg errors by using an array fo char passed to av_strerror function. * Warnings from Coverity Scan.
1 parent 50843b9 commit c838aea

File tree

1 file changed

+14
-21
lines changed

1 file changed

+14
-21
lines changed

src/AvTranscoder/common.cpp

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,8 @@ void ParamSet::set( const std::string& key, const std::string& flag, const bool
3333
error = av_opt_get_int( _objContext, key.c_str(), AV_OPT_SEARCH_CHILDREN, &optVal );
3434
if( error != 0 )
3535
{
36-
std::string err( "", AV_ERROR_MAX_STRING_SIZE );
37-
//av_make_error_string( const_cast<char*>(err.c_str()), err.size(), error );
38-
av_strerror( error, const_cast<char*>(err.c_str()), err.size() );
36+
char err[AV_ERROR_MAX_STRING_SIZE];
37+
av_strerror( error, err, AV_ERROR_MAX_STRING_SIZE );
3938
throw std::runtime_error( "unknown key " + key + ": " + err );
4039
}
4140

@@ -47,9 +46,8 @@ void ParamSet::set( const std::string& key, const std::string& flag, const bool
4746
error = av_opt_set_int( _objContext, key.c_str(), optVal, AV_OPT_SEARCH_CHILDREN );
4847
if( error != 0 )
4948
{
50-
std::string err( "", AV_ERROR_MAX_STRING_SIZE );
51-
//av_make_error_string( const_cast<char*>(err.c_str()), err.size(), error );
52-
av_strerror( error, const_cast<char*>(err.c_str()), err.size() );
49+
char err[AV_ERROR_MAX_STRING_SIZE];
50+
av_strerror( error, err, AV_ERROR_MAX_STRING_SIZE );
5351
throw std::runtime_error( "setting " + key + " parameter to " + flag + ": " + err );
5452
}
5553
}
@@ -59,9 +57,8 @@ void ParamSet::set( const std::string& key, const bool value )
5957
int error = av_opt_set_int( _objContext, key.c_str(), value, AV_OPT_SEARCH_CHILDREN );
6058
if( error != 0 )
6159
{
62-
std::string err( "", AV_ERROR_MAX_STRING_SIZE );
63-
//av_make_error_string( const_cast<char*>(err.c_str()), err.size(), error );
64-
av_strerror( error, const_cast<char*>(err.c_str()), err.size() );
60+
char err[AV_ERROR_MAX_STRING_SIZE];
61+
av_strerror( error, err, AV_ERROR_MAX_STRING_SIZE );
6562
throw std::runtime_error( "setting " + key + " parameter to " + ( value ? "true" : "false" ) + ": " + err );
6663
}
6764
}
@@ -75,9 +72,8 @@ void ParamSet::set( const std::string& key, const int value )
7572
{
7673
std::ostringstream os;
7774
os << value;
78-
std::string err( "", AV_ERROR_MAX_STRING_SIZE );
79-
//av_make_error_string( const_cast<char*>(err.c_str()), err.size(), error );
80-
av_strerror( error, const_cast<char*>(err.c_str()), err.size() );
75+
char err[AV_ERROR_MAX_STRING_SIZE];
76+
av_strerror( error, err, AV_ERROR_MAX_STRING_SIZE );
8177
throw std::runtime_error( "setting " + key + " parameter to " + os.str() + ": " + err );
8278
}
8379
}
@@ -92,9 +88,8 @@ void ParamSet::set( const std::string& key, const int num, const int den )
9288
{
9389
std::ostringstream os;
9490
os << num << "/" << den;
95-
std::string err( "", AV_ERROR_MAX_STRING_SIZE );
96-
//av_make_error_string( const_cast<char*>(err.c_str()), err.size(), error );
97-
av_strerror( error, const_cast<char*>(err.c_str()), err.size() );
91+
char err[AV_ERROR_MAX_STRING_SIZE];
92+
av_strerror( error, err, AV_ERROR_MAX_STRING_SIZE );
9893
throw std::runtime_error( "setting " + key + " parameter to " + os.str() + ": " + err );
9994
}
10095
}
@@ -106,9 +101,8 @@ void ParamSet::set( const std::string& key, const double value )
106101
{
107102
std::ostringstream os;
108103
os << value;
109-
std::string err( "", AV_ERROR_MAX_STRING_SIZE );
110-
//av_make_error_string( const_cast<char*>(err.c_str()), err.size(), error );
111-
av_strerror( error, const_cast<char*>(err.c_str()), err.size() );
104+
char err[AV_ERROR_MAX_STRING_SIZE];
105+
av_strerror( error, err, AV_ERROR_MAX_STRING_SIZE );
112106
throw std::runtime_error( "setting " + key + " parameter to " + os.str() + ": " + err );
113107
}
114108
}
@@ -118,9 +112,8 @@ void ParamSet::set( const std::string& key, const std::string& value )
118112
int error = av_opt_set( _objContext, key.c_str(), value.c_str(), AV_OPT_SEARCH_CHILDREN );
119113
if( error != 0 )
120114
{
121-
std::string err( "", AV_ERROR_MAX_STRING_SIZE );
122-
//av_make_error_string( const_cast<char*>(err.c_str()), err.size(), error );
123-
av_strerror( error, const_cast<char*>(err.c_str()), err.size() );
115+
char err[AV_ERROR_MAX_STRING_SIZE];
116+
av_strerror( error, err, AV_ERROR_MAX_STRING_SIZE );
124117
throw std::runtime_error( "setting " + key + " parameter to " + value + ": " + err );
125118
}
126119
}

0 commit comments

Comments
 (0)