Use snprintf() instead of sprintf()

This commit is contained in:
Pierre Pronchery 2015-05-18 22:56:58 +02:00
parent 88a07b8123
commit 95a3139496

View File

@ -302,6 +302,7 @@ static int _ls_directory_do(Prefs * prefs, char const * directory)
char * file = NULL; char * file = NULL;
char * p; char * p;
int pos = 1; int pos = 1;
size_t len;
if((dir = opendir(directory)) == NULL) if((dir = opendir(directory)) == NULL)
return _ls_error(directory, 1); return _ls_error(directory, 1);
@ -313,14 +314,14 @@ static int _ls_directory_do(Prefs * prefs, char const * directory)
slist_insert_sorted(files, strdup(de->d_name), cmp); slist_insert_sorted(files, strdup(de->d_name), cmp);
if(pos <= 2) if(pos <= 2)
continue; continue;
if((p = realloc(file, strlen(directory) + strlen(de->d_name) len = strlen(directory) + 1 + strlen(de->d_name) + 1;
+ 2)) == NULL) if((p = realloc(file, len)) == NULL)
{ {
_ls_error("malloc", 0); _ls_error("malloc", 0);
continue; continue;
} }
file = p; file = p;
sprintf(file, "%s/%s", directory, de->d_name); snprintf(file, len, "%s/%s", directory, de->d_name);
if((*prefs & LS_PREFS_R) && _is_directory(prefs, file) == 1) if((*prefs & LS_PREFS_R) && _is_directory(prefs, file) == 1)
slist_insert_sorted(dirs, strdup(file), cmp); slist_insert_sorted(dirs, strdup(file), cmp);
} }
@ -452,6 +453,7 @@ static char _short_file_mode(Prefs * prefs, char const * directory,
int (* _stat)(const char * filename, struct stat * buf) = lstat; int (* _stat)(const char * filename, struct stat * buf) = lstat;
struct stat st; struct stat st;
char * p; char * p;
size_t len;
if(*prefs & LS_PREFS_H || *prefs & LS_PREFS_L) if(*prefs & LS_PREFS_H || *prefs & LS_PREFS_L)
_stat = stat; _stat = stat;
@ -462,10 +464,10 @@ static char _short_file_mode(Prefs * prefs, char const * directory,
} }
else else
{ {
if((p = malloc(strlen(directory) + 1 + strlen(file) + 1)) len = strlen(directory) + 1 + strlen(file) + 1;
== NULL) if((p = malloc(len)) == NULL)
return _ls_error("malloc", 0); return _ls_error("malloc", 0);
sprintf(p, "%s/%s", directory, file); snprintf(p, len, "%s/%s", directory, file);
if(_stat(p, &st) != 0) if(_stat(p, &st) != 0)
{ {
free(p); free(p);
@ -486,6 +488,7 @@ static int _ls_do_files_long(Prefs * prefs, char const * directory,
char * p; char * p;
int (* _stat)(const char * filename, struct stat * buf) = lstat; int (* _stat)(const char * filename, struct stat * buf) = lstat;
struct stat st; struct stat st;
size_t len;
if(*prefs & LS_PREFS_H || *prefs & LS_PREFS_L) if(*prefs & LS_PREFS_H || *prefs & LS_PREFS_L)
_stat = stat; _stat = stat;
@ -494,15 +497,15 @@ static int _ls_do_files_long(Prefs * prefs, char const * directory,
p = slist_data(&cur); p = slist_data(&cur);
if(directory != NULL) if(directory != NULL)
{ {
if((p = realloc(file, strlen(directory) + strlen(p) len = strlen(directory) + 1 + strlen(p) + 1;
+ 2)) == NULL) if((p = realloc(file, len)) == NULL)
{ {
_ls_error("malloc", 0); _ls_error("malloc", 0);
continue; continue;
} }
file = p; file = p;
p = slist_data(&cur); p = slist_data(&cur);
sprintf(file, "%s/%s", directory, p); snprintf(file, "%s/%s", directory, p);
} }
if(_stat(directory == NULL ? p : file, &st) != 0) if(_stat(directory == NULL ? p : file, &st) != 0)
_ls_error(file, 0); _ls_error(file, 0);