Use snprintf() instead of sprintf()
This commit is contained in:
parent
88a07b8123
commit
95a3139496
21
src/ls.c
21
src/ls.c
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user