diff -Nrup a/src/job_control.c b/src/job_control.c --- a/src/job_control.c 2010-11-12 08:01:46.000000000 +0100 +++ b/src/job_control.c 2010-11-25 10:37:48.000000000 +0100 @@ -44,6 +44,7 @@ #define CLEAR_PIPE_BUF_SIZE 512 #define COUNT_BEFORE_GET_AVG 10 +#define MAX_TRACKSIZE_REDBOOK strlen("99") #define CALC_START_SESSION 0 #define CALC_STOP_SESSION 1 @@ -432,15 +433,14 @@ void job_finisher( _main_data *main_data int madewavs = FALSE; int mademp3s = FALSE; int tracksdone = 0; - char *s_track_num; + /* the '+ 1' reserves space for the \0 snprintf appends */ + char s_track_num[MAX_TRACKSIZE_REDBOOK + 1]; char *artist; ID3Tag *myTag; FILE *fp_playlist = NULL; char playlist_filespec[ MAX_FILE_PATH_LENGTH + MAX_FILE_NAME_LENGTH ]; - /* Allocate space dynamically. This is overkill, but certainly won't be a problem. */ - s_track_num = (char *) malloc((main_data->num_tracks + 2) * sizeof(char)); buffer[0] = 0; /* Clean up */ @@ -489,7 +489,7 @@ void job_finisher( _main_data *main_data originally supported id3 now wants apev2 tags */ } else { /* assume MP3 tag is desired */ - sprintf(s_track_num,"%d",(i+1)); + snprintf(s_track_num, sizeof(s_track_num), "%d", (i+1)); myTag=ID3Tag_New(); ID3Tag_Link(myTag,enc_file);