Fix bug 4325 "Following redirects when retrieving image"
[claws.git] / src / plugins / libravatar / libravatar_image.c
index 9a0338b603ba5e4852708f172051edd8fc6cae98..b5675aac2dd2ea499c96214f2b80d3944de78123 100644 (file)
@@ -72,6 +72,7 @@ static GdkPixbuf *pixbuf_from_url(const gchar *url, const gchar *md5, const gcha
        GdkPixbuf *image = NULL;
        FILE *file;
        CURL *curl;
        GdkPixbuf *image = NULL;
        FILE *file;
        CURL *curl;
+       CURLcode res;
        long filesize;
 
        file = claws_fopen(filename, "wb");
        long filesize;
 
        file = claws_fopen(filename, "wb");
@@ -98,28 +99,37 @@ static GdkPixbuf *pixbuf_from_url(const gchar *url, const gchar *md5, const gcha
        curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
 
        if (libravatarprefs.allow_redirects) {
        curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
 
        if (libravatarprefs.allow_redirects) {
-               long maxredirs = (libravatarprefs.default_mode == DEF_MODE_URL)? 3L
-                       : ((libravatarprefs.default_mode == DEF_MODE_MM)? 2L: 1L);
+               long maxredirs = (libravatarprefs.default_mode == DEF_MODE_URL)
+                       ? libravatarprefs.max_redirects_url
+                       : ((libravatarprefs.default_mode == DEF_MODE_MM)
+                               ? libravatarprefs.max_redirects_mm
+                               : libravatarprefs.max_redirects_url);
+               debug_print("setting max redirects to %ld\n", maxredirs);
                curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
                curl_easy_setopt(curl, CURLOPT_MAXREDIRS, maxredirs);
        }
        curl_easy_setopt(curl, CURLOPT_FILE, file);
        debug_print("retrieving URL to file: %s -> %s\n", url, filename);
                curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
                curl_easy_setopt(curl, CURLOPT_MAXREDIRS, maxredirs);
        }
        curl_easy_setopt(curl, CURLOPT_FILE, file);
        debug_print("retrieving URL to file: %s -> %s\n", url, filename);
-       curl_easy_perform(curl);
-       filesize = ftell(file);
-       claws_safe_fclose(file);
-       if (filesize < MIN_PNG_SIZE)
-               debug_print("not enough data for an avatar image: %ld bytes\n", filesize);
-       else
-               image = image_pixbuf_from_filename(filename);
-
-       if (!libravatarprefs.cache_icons || filesize == 0) {
-               if (g_unlink(filename) < 0)
-                       g_warning("failed to delete cache file '%s'", filename);
-       }
+       res = curl_easy_perform(curl);
+       if (res != CURLE_OK) {
+               debug_print("curl_easy_perfom failed: %s", curl_easy_strerror(res));
+               claws_safe_fclose(file);
+       } else {
+               filesize = ftell(file);
+               claws_safe_fclose(file);
+               if (filesize < MIN_PNG_SIZE)
+                       debug_print("not enough data for an avatar image: %ld bytes\n", filesize);
+               else
+                       image = image_pixbuf_from_filename(filename);
+
+               if (!libravatarprefs.cache_icons || filesize == 0) {
+                       if (g_unlink(filename) < 0)
+                               g_warning("failed to delete cache file '%s'", filename);
+               }
 
 
-       if (filesize == 0)
-               missing_add_md5(libravatarmisses, md5);
+               if (filesize == 0)
+                       missing_add_md5(libravatarmisses, md5);
+       }
 
        curl_easy_cleanup(curl);
 
 
        curl_easy_cleanup(curl);