Index: src/job_control.c =================================================================== --- src/job_control.c (revision 76) +++ src/job_control.c (working copy) @@ -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 @@ 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 @@ 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); @@ -524,7 +524,6 @@ } main_data->track[ i ].make_mp3 = FALSE; } /* end loop over all tracks */ - free(s_track_num); if (( config.cddb_config.create_playlist == TRUE ) && ( fp_playlist != NULL )) fclose( fp_playlist );