summaryrefslogtreecommitdiff
path: root/camel
diff options
context:
space:
mode:
authorJeffrey Stedfast <fejj@ximian.com>2004-03-25 18:27:41 +0000
committerJeffrey Stedfast <fejj@src.gnome.org>2004-03-25 18:27:41 +0000
commit0adf2d628102e46e4341ea4739db04c09c89d268 (patch)
tree1ce3ee5442f20d9e8f584515cfd1333b1fd7e086 /camel
parentc7092faef137acf17017239bf7980c777abc532d (diff)
downloadevolution-data-server-0adf2d628102e46e4341ea4739db04c09c89d268.tar.gz
Fix for bug #55018.
2004-03-25 Jeffrey Stedfast <fejj@ximian.com> Fix for bug #55018. * providers/imap/camel-imap-store.c (create_folder): Don't allow the suer to create folders with #, %, * or the directory separator in the folder name (added the checks for %, * and #). (get_folder_online): Add a check to make sure the folder name is sane before sending a CREATE (ie. we want to allow getting of folders with discouraged characters in them if they exist, but we don't want to allow the user to create them).
Diffstat (limited to 'camel')
-rw-r--r--camel/ChangeLog12
-rw-r--r--camel/providers/imap/camel-imap-store.c27
2 files changed, 35 insertions, 4 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog
index 5842284ac..4d7a32fc3 100644
--- a/camel/ChangeLog
+++ b/camel/ChangeLog
@@ -1,3 +1,15 @@
+2004-03-25 Jeffrey Stedfast <fejj@ximian.com>
+
+ Fix for bug #55018.
+
+ * providers/imap/camel-imap-store.c (create_folder): Don't allow
+ the suer to create folders with #, %, * or the directory separator
+ in the folder name (added the checks for %, * and #).
+ (get_folder_online): Add a check to make sure the folder name is
+ sane before sending a CREATE (ie. we want to allow getting of
+ folders with discouraged characters in them if they exist, but we
+ don't want to allow the user to create them).
+
2004-03-25 Martyn Russell <ginxd@btopenworld.com>
* providers/smtp/camel-smtp-provider.c: Removed newline character
diff --git a/camel/providers/imap/camel-imap-store.c b/camel/providers/imap/camel-imap-store.c
index b9ced3e01..f60b91c68 100644
--- a/camel/providers/imap/camel-imap-store.c
+++ b/camel/providers/imap/camel-imap-store.c
@@ -1703,7 +1703,8 @@ get_folder_online (CamelStore *store, const char *folder_name, guint32 flags, Ca
response = camel_imap_command (imap_store, NULL, ex, "SELECT %F", folder_name);
if (!response) {
char *folder_real;
-
+ const char *c;
+
if (camel_exception_get_id(ex) == CAMEL_EXCEPTION_USER_CANCEL) {
CAMEL_SERVICE_UNLOCK (imap_store, connect_lock);
return NULL;
@@ -1717,7 +1718,20 @@ get_folder_online (CamelStore *store, const char *folder_name, guint32 flags, Ca
_("No such folder %s"), folder_name);
return NULL;
}
-
+
+ c = folder_name;
+ while (*c && *c != imap_store->dir_sep && !strchr ("#%*", *c))
+ c++;
+
+ if (*c != '\0') {
+ CAMEL_SERVICE_UNLOCK (imap_store, connect_lock);
+ camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID_PATH,
+ _("The folder name \"%s\" is invalid because "
+ "it containes the character \"%c\""),
+ folder_name, *c);
+ return NULL;
+ }
+
folder_real = camel_imap_store_summary_path_to_full(imap_store->summary, folder_name, store->dir_sep);
response = camel_imap_command (imap_store, NULL, ex, "CREATE %S", folder_real);
@@ -1988,17 +2002,22 @@ create_folder (CamelStore *store, const char *parent_name,
CamelFolderInfo *root = NULL;
gboolean need_convert;
int i = 0, flags;
+ const char *c;
if (!camel_disco_store_check_online (CAMEL_DISCO_STORE (store), ex))
return NULL;
if (!parent_name)
parent_name = "";
- if (strchr (folder_name, imap_store->dir_sep)) {
+ c = folder_name;
+ while (*c && *c != imap_store->dir_sep && !strchr ("#%*", *c))
+ c++;
+
+ if (*c != '\0') {
camel_exception_setv (ex, CAMEL_EXCEPTION_FOLDER_INVALID_PATH,
_("The folder name \"%s\" is invalid because "
"it containes the character \"%c\""),
- folder_name, imap_store->dir_sep);
+ folder_name, *c);
return NULL;
}