summaryrefslogtreecommitdiff
blob: b19bf8f39d67d29937be209f4f55439a2f165bbf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
From: Ricardo Mones <ricardo@mones.org>
Date: Wed, 9 Aug 2017 14:48:38 +0000 (+0200)
Subject: Fix bug #3855: segfault at startup with old profile and IMAP account
X-Git-Url: http://git.claws-mail.org/?p=claws.git;a=commitdiff_plain;h=667c9d3eaf0487193cc7873e6d3a63959a03d7f9;hp=63677adb68c57479f6bc7534cfbf2f234b1f4fb1

Fix bug #3855: segfault at startup with old profile and IMAP account

Revert "Remove duplicated code and include".

This reverts commit 300f811f3bbf10455ca55d9b01da6705dd1e07bb.
---

diff --git a/src/imap.c b/src/imap.c
index 0e1e777..25bb283 100644
--- a/src/imap.c
+++ b/src/imap.c
@@ -77,6 +77,8 @@ typedef struct _IMAPSession	IMAPSession;
 typedef struct _IMAPNameSpace	IMAPNameSpace;
 typedef struct _IMAPFolderItem	IMAPFolderItem;
 
+#include "prefs_account.h"
+
 #define IMAP_FOLDER(obj)	((IMAPFolder *)obj)
 #define IMAP_FOLDER_ITEM(obj)	((IMAPFolderItem *)obj)
 #define IMAP_SESSION(obj)	((IMAPSession *)obj)
@@ -425,6 +427,7 @@ static gint imap_get_flags			(Folder 	*folder,
 						 FolderItem 	*item,
                     				 MsgInfoList 	*msglist,
 						 GHashTable 	*msgflags);
+static gchar *imap_folder_get_path		(Folder		*folder);
 static gchar *imap_item_get_path		(Folder		*folder,
 						 FolderItem	*item);
 static MsgInfo *imap_parse_msg(const gchar *file, FolderItem *item);
@@ -3042,6 +3045,35 @@ static FolderItem *imap_create_special_folder(Folder *folder,
 	return new_item;
 }
 
+static gchar *imap_folder_get_path(Folder *folder)
+{
+	gchar *folder_path;
+
+	g_return_val_if_fail(folder != NULL, NULL);
+        g_return_val_if_fail(folder->account != NULL, NULL);
+
+#ifdef G_OS_WIN32
+	gchar *sanitized_dirname = g_strdup(folder->account->recv_server);
+	g_strdelimit(sanitized_dirname, ":", ',');
+#endif
+
+        folder_path = g_strconcat(get_imap_cache_dir(),
+                                  G_DIR_SEPARATOR_S,
+#ifdef G_OS_WIN32
+																	sanitized_dirname,
+#else
+                                  folder->account->recv_server,
+#endif
+                                  G_DIR_SEPARATOR_S,
+                                  folder->account->userid,
+                                  NULL);
+
+#ifdef G_OS_WIN32
+	g_free(sanitized_dirname);
+#endif
+	return folder_path;
+}
+
 #ifdef G_OS_WIN32
 static gchar *imap_encode_unsafe_chars(const gchar *str)
 {
@@ -3078,9 +3110,8 @@ static gchar *imap_item_get_path(Folder *folder, FolderItem *item)
 	gchar *item_path = NULL;
 	
 	g_return_val_if_fail(folder != NULL, NULL);
-	g_return_val_if_fail(folder->account != NULL, NULL);
 	g_return_val_if_fail(item != NULL, NULL);
-	folder_path = prefs_account_cache_dir(folder->account, FALSE);
+	folder_path = imap_folder_get_path(folder);
 
 	g_return_val_if_fail(folder_path != NULL, NULL);