storedPlaylist: faster, but less accurate check for maximum sizes
There are still other ways to run the mpd server out of disk-space, so permissions are still recommended to protect against malicious users. git-svn-id: https://svn.musicpd.org/mpd/trunk@7179 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
parent
b1cbe333a6
commit
22efbd5eca
@ -287,7 +287,7 @@ int appendSongToStoredPlaylistByPath(int fd, const char *utf8path, Song *song)
|
|||||||
{
|
{
|
||||||
FILE *file;
|
FILE *file;
|
||||||
char *s;
|
char *s;
|
||||||
int nr_songs = 0;
|
struct stat st;
|
||||||
char path_max_tmp[MPD_PATH_MAX];
|
char path_max_tmp[MPD_PATH_MAX];
|
||||||
char path_max_tmp2[MPD_PATH_MAX];
|
char path_max_tmp2[MPD_PATH_MAX];
|
||||||
|
|
||||||
@ -295,18 +295,18 @@ int appendSongToStoredPlaylistByPath(int fd, const char *utf8path, Song *song)
|
|||||||
return -1;
|
return -1;
|
||||||
utf8_to_fs_playlist_path(path_max_tmp, utf8path);
|
utf8_to_fs_playlist_path(path_max_tmp, utf8path);
|
||||||
|
|
||||||
while (!(file = fopen(path_max_tmp, "a+")) && errno == EINTR);
|
while (!(file = fopen(path_max_tmp, "a")) && errno == EINTR);
|
||||||
if (file == NULL) {
|
if (file == NULL) {
|
||||||
commandError(fd, ACK_ERROR_NO_EXIST, "could not open file "
|
commandError(fd, ACK_ERROR_NO_EXIST, "could not open file "
|
||||||
"\"%s\": %s", path_max_tmp, strerror(errno));
|
"\"%s\": %s", path_max_tmp, strerror(errno));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
while (myFgets(path_max_tmp, sizeof(path_max_tmp), file)) {
|
if (fstat(fileno(file), &st) < 0) {
|
||||||
if (path_max_tmp[0] != PLAYLIST_COMMENT &&
|
commandError(fd, ACK_ERROR_NO_EXIST, "could not stat file "
|
||||||
(++nr_songs >= playlist_max_length))
|
"\"%s\": %s", path_max_tmp, strerror(errno));
|
||||||
break;
|
return -1;
|
||||||
}
|
}
|
||||||
if (nr_songs >= playlist_max_length) {
|
if (st.st_size >= ((MPD_PATH_MAX+1) * playlist_max_length)) {
|
||||||
commandError(fd, ACK_ERROR_PLAYLIST_MAX,
|
commandError(fd, ACK_ERROR_PLAYLIST_MAX,
|
||||||
"playlist is at the max size");
|
"playlist is at the max size");
|
||||||
return -1;
|
return -1;
|
||||||
|
Loading…
Reference in New Issue
Block a user