summaryrefslogtreecommitdiff
path: root/plugins/artwork
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-05-22 12:12:19 +0200
committerGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-05-22 12:12:19 +0200
commitcacfeb0d9749074f6fd58fb58db3e8dcf7a2a139 (patch)
tree5a6e9f8c4fb6bbd9a7a28d6cd0f846bfafbd6b8a /plugins/artwork
parentc2ec43487c376f5e44db0b7513675c8788869f95 (diff)
coverart: prevent attempts to load partial files
Diffstat (limited to 'plugins/artwork')
-rw-r--r--plugins/artwork/albumartorg.c13
-rw-r--r--plugins/artwork/artwork.c4
-rw-r--r--plugins/artwork/lastfm.c13
3 files changed, 24 insertions, 6 deletions
diff --git a/plugins/artwork/albumartorg.c b/plugins/artwork/albumartorg.c
index 18b494a4..d438cf9c 100644
--- a/plugins/artwork/albumartorg.c
+++ b/plugins/artwork/albumartorg.c
@@ -74,9 +74,11 @@ fetch_from_albumart_org (const char *artist, const char *album, const char *dest
}
current_file = fp;
- FILE *out = fopen (dest, "w+b");
+ char temp[PATH_MAX];
+ snprintf (temp, sizeof (temp), "%s.part", dest);
+ FILE *out = fopen (temp, "w+b");
if (!out) {
- trace ("fetch_from_albumart_org: failed to open %s for writing\n", dest);
+ trace ("fetch_from_albumart_org: failed to open %s for writing\n", temp);
current_file = NULL;
deadbeef->fclose (fp);
return -1;
@@ -98,9 +100,16 @@ fetch_from_albumart_org (const char *artist, const char *album, const char *dest
deadbeef->fclose (fp);
if (error) {
+ unlink (temp);
+ return -1;
+ }
+
+ if (rename (temp, dest) != 0) {
+ unlink (temp);
unlink (dest);
return -1;
}
+
return 0;
}
diff --git a/plugins/artwork/artwork.c b/plugins/artwork/artwork.c
index ef2d0e00..4af9658b 100644
--- a/plugins/artwork/artwork.c
+++ b/plugins/artwork/artwork.c
@@ -435,7 +435,7 @@ fetcher_thread (void *none)
char*
get_album_art (const char *fname, const char *artist, const char *album, artwork_callback callback, void *user_data)
{
-// trace ("get_album_art: %s (%s - %s)\n", fname, artist, album);
+ trace ("get_album_art: %s (%s - %s)\n", fname, artist, album);
char path [1024];
if (!album) {
@@ -470,7 +470,7 @@ get_album_art (const char *fname, const char *artist, const char *album, artwork
}
}
-// trace ("found %s in cache\n", path);
+ trace ("found %s in cache\n", path);
return strdup (path);
}
diff --git a/plugins/artwork/lastfm.c b/plugins/artwork/lastfm.c
index 2aed6d7c..bf76ccca 100644
--- a/plugins/artwork/lastfm.c
+++ b/plugins/artwork/lastfm.c
@@ -64,9 +64,11 @@ fetch_from_lastfm (const char *artist, const char *album, const char *dest)
}
current_file = fp;
- FILE *out = fopen (dest, "w+b");
+ char temp[PATH_MAX];
+ snprintf (temp, sizeof (temp), "%s.part", dest);
+ FILE *out = fopen (temp, "w+b");
if (!out) {
- trace ("fetch_from_lastfm: failed to open %s for writing\n", dest);
+ trace ("fetch_from_lastfm: failed to open %s for writing\n", temp);
deadbeef->fclose (fp);
current_file = NULL;
return -1;
@@ -88,8 +90,15 @@ fetch_from_lastfm (const char *artist, const char *album, const char *dest)
deadbeef->fclose (fp);
if (error) {
+ unlink (temp);
+ return -1;
+ }
+
+ if (rename (temp, dest) != 0) {
+ unlink (temp);
unlink (dest);
return -1;
}
+
return 0;
}