Update jpeglib's format_message() error routine to use snprintf() for buffer security

This commit is contained in:
Stephen Saunders 2023-06-20 13:16:37 -04:00
parent 52dd6193bf
commit 16077c7cd6
3 changed files with 8 additions and 8 deletions

View file

@ -68,7 +68,7 @@ error_exit( j_common_ptr cinfo )
char buffer[JMSG_LENGTH_MAX];
/* Create the message */
( *cinfo->err->format_message )( cinfo, buffer );
( *cinfo->err->format_message )( cinfo, buffer, sizeof( buffer ) );
/* Let the memory manager delete any temp files before we die */
jpeg_destroy( cinfo );
@ -89,7 +89,7 @@ output_message( j_common_ptr cinfo )
char buffer[JMSG_LENGTH_MAX];
/* Create the message */
( *cinfo->err->format_message )( cinfo, buffer );
( *cinfo->err->format_message )( cinfo, buffer, sizeof( buffer ) );
/* Send it to stderr, adding a newline */
jpg_Printf( "%s\n", buffer );
@ -144,7 +144,7 @@ emit_message( j_common_ptr cinfo, int msg_level )
*/
METHODDEF void
format_message( j_common_ptr cinfo, char* buffer )
format_message( j_common_ptr cinfo, char* buffer, int bufsize )
{
struct jpeg_error_mgr* err = cinfo->err;
int msg_code = err->msg_code;
@ -190,11 +190,11 @@ format_message( j_common_ptr cinfo, char* buffer )
/* Format the message into the passed buffer */
if( isstring )
{
sprintf( buffer, msgtext, err->msg_parm.s );
snprintf( buffer, bufsize, msgtext, err->msg_parm.s );
}
else
{
sprintf( buffer, msgtext,
snprintf( buffer, bufsize, msgtext,
err->msg_parm.i[0], err->msg_parm.i[1],
err->msg_parm.i[2], err->msg_parm.i[3],
err->msg_parm.i[4], err->msg_parm.i[5],

View file

@ -646,7 +646,7 @@ struct jpeg_error_mgr
/* Routine that actually outputs a trace or error message */
JMETHOD( void, output_message, ( j_common_ptr cinfo ) );
/* Format a message string for the most recent JPEG error or message */
JMETHOD( void, format_message, ( j_common_ptr cinfo, char* buffer ) );
JMETHOD( void, format_message, ( j_common_ptr cinfo, char* buffer, int bufsize ) );
#define JMSG_LENGTH_MAX 200 /* recommended size of format_message buffer */
/* Reset error state variables at start of a new image */
JMETHOD( void, reset_error_mgr, ( j_common_ptr cinfo ) );

View file

@ -43,13 +43,13 @@ These are the static callback functions the jpeg library calls
void swf_jpeg_error_exit( jpeg_common_struct* cinfo )
{
char buffer[JMSG_LENGTH_MAX] = {0};
( *cinfo->err->format_message )( cinfo, buffer );
( *cinfo->err->format_message )( cinfo, buffer, sizeof( buffer ) );
throw idException( buffer );
}
void swf_jpeg_output_message( jpeg_common_struct* cinfo )
{
char buffer[JMSG_LENGTH_MAX] = {0};
( *cinfo->err->format_message )( cinfo, buffer );
( *cinfo->err->format_message )( cinfo, buffer, sizeof( buffer ) );
idLib::Printf( "%s\n", buffer );
}
void swf_jpeg_init_source( jpeg_decompress_struct* cinfo )