Commit 22efbd5e authored by Eric Wong's avatar Eric Wong

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
parent b1cbe333
...@@ -287,7 +287,7 @@ int appendSongToStoredPlaylistByPath(int fd, const char *utf8path, Song *song) ...@@ -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) ...@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment