Refactor fserv's make_temp_list(), with help from caf, and use mkstemp()
instead of tmpnam(), which is dangerous. Found by Coverity. git-svn-id: svn://svn.code.sf.net/p/bitchx/code/trunk@306 13b04d17-f746-0410-82c6-800466cd88b0
This commit is contained in:
@@ -720,44 +720,60 @@ Files *search_list(char *nick, char *pat, int wild)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char *make_temp_list(char *nick)
|
char *make_temp_list(char *nick)
|
||||||
{
|
{
|
||||||
char *nam;
|
Files *file;
|
||||||
char *real_nam;
|
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
const time_t when = now;
|
||||||
|
int count;
|
||||||
|
char *fmt, *name;
|
||||||
|
char buf[BIG_BUFFER_SIZE + 1];
|
||||||
|
|
||||||
if (!(nam = get_dllstring_var("fserv_filename")) || !*nam)
|
if (fserv_files == NULL)
|
||||||
nam = tmpnam(NULL);
|
return NULL;
|
||||||
real_nam = expand_twiddle(nam);
|
|
||||||
if (!fserv_files || !real_nam || !*real_nam)
|
name = get_dllstring_var("fserv_filename");
|
||||||
|
if (name != NULL && *name != '\0')
|
||||||
{
|
{
|
||||||
new_free(&real_nam);
|
char *real_name = expand_twiddle(name);
|
||||||
|
|
||||||
|
if (real_name == NULL || *real_name == '\0')
|
||||||
|
return NULL;
|
||||||
|
fp = fopen(real_name, "w");
|
||||||
|
new_free(&real_name);
|
||||||
|
if (fp == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if ((fp = fopen(real_nam, "w")))
|
else
|
||||||
{
|
{
|
||||||
char buffer2[BIG_BUFFER_SIZE+1];
|
int fd;
|
||||||
char *fs;
|
static char template[sizeof("fserv_XXXXXX")];
|
||||||
int count = 0;
|
|
||||||
|
|
||||||
time_t t = now;
|
name = strcpy(template, "fserv_XXXXXX");
|
||||||
Files *new;
|
fd = mkstemp(template);
|
||||||
strftime(buffer2, 200, "%X %d/%m/%Y", localtime(&t));
|
if (fd == -1)
|
||||||
for (new = fserv_files; new; new = new->next)
|
return NULL;
|
||||||
|
fp = fdopen(fd, "w");
|
||||||
|
if (fp == NULL)
|
||||||
|
{
|
||||||
|
close(fd);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (count = 0, file = fserv_files; file != NULL; file = file->next)
|
||||||
count++;
|
count++;
|
||||||
fprintf(fp, "Temporary mp3 list created for %s by %s on %s with %d mp3's\n\n", nick, get_server_nickname(from_server), buffer2, count);
|
strftime(buf, sizeof(buf), "%X %d/%m/%Y", localtime(&when));
|
||||||
*buffer2 = 0;
|
fprintf(fp, "Temporary mp3 list created for %s by %s on %s with %d mp3's\n\n",
|
||||||
if (!(fs = get_dllstring_var("fserv_format")) || !*fs)
|
nick, get_server_nickname(from_server), buf, count);
|
||||||
fs = " %6.3s %3b [%t]\t %f\n";
|
fmt = get_dllstring_var("fserv_format");
|
||||||
for (new = fserv_files; new; new = new->next)
|
if (fmt == NULL || *fmt == '\0')
|
||||||
make_mp3_string(fp, new, fs, buffer2);
|
fmt = " %6.3s %3b [%t]\t %f\n";
|
||||||
|
for (*buf = '\0', file = fserv_files; file != NULL; file = file->next)
|
||||||
|
make_mp3_string(fp, file, fmt, buf);
|
||||||
|
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
new_free(&real_nam);
|
return name;
|
||||||
return nam;
|
|
||||||
}
|
|
||||||
new_free(&real_nam);
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BUILT_IN_DLL(list_fserv)
|
BUILT_IN_DLL(list_fserv)
|
||||||
|
|||||||
Reference in New Issue
Block a user