Description: Apply patch to use temp files, which are dependent on the file which is beeing processed, instead always using the same filename, which can result to data loss in scenarios where two or more vorbis processes are running parallel. Author: Pavel N. Krivitsky Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=505164 Forwarded: no --- vorbis.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) --- a/vorbis.c +++ b/vorbis.c @@ -56,7 +56,7 @@ #define PROGRESS_FORMAT_SIZE 8 #define MIN_FILENAME_SIZE 5 #define MIN_MIDDLE_TRUNCATE_SIZE 20 -#define TEMP_NAME "vorbisgain.tmpXXXXXX" +#define TEMP_EXT ".vgain.tmpXXXXXX" /** @@ -684,11 +684,10 @@ } } - /* Make sure temp is in same folder as file. And yes, the malloc is larger - * than necessary (and not always needed). Lets keep it simple though (at - * the expense of a few bytes)... + /* Construct a temporary file name by appending TEMP_EXT to + * the name of the file being modified. */ - temp_name = malloc(strlen(filename) + sizeof(TEMP_NAME)); + temp_name = malloc(strlen(filename)*sizeof(char) + sizeof(TEMP_EXT)); if (temp_name == NULL) { @@ -697,7 +696,7 @@ } strcpy(temp_name, filename); - strcpy((char *) last_path(temp_name), TEMP_NAME); + strcat(temp_name, TEMP_EXT); #ifdef WIN32 temp_name = _mktemp(temp_name); @@ -779,6 +778,7 @@ file_error(_("Note: Couldn't set mode for file '%s': "), filename); } +#if 0 /* Disable for Debian, this surprises people and is not useful --liw */ utime_buf.actime = stat_buf.st_atime; utime_buf.modtime = stat_buf.st_mtime; @@ -786,6 +786,7 @@ { file_error(_("Note: Couldn't set time for file '%s': "), filename); } +#endif result = 0; @@ -817,10 +818,10 @@ if (delete_temp) { - if (remove(TEMP_NAME) != 0) + if (remove(temp_name) != 0) { file_error(_("Note: Couldn't remove temporary file '%s': "), - TEMP_NAME); + temp_name); } }