aboutsummaryrefslogtreecommitdiffstats
path: root/camel/providers/imap
diff options
context:
space:
mode:
Diffstat (limited to 'camel/providers/imap')
-rw-r--r--camel/providers/imap/camel-imap-command.c1
-rw-r--r--camel/providers/imap/camel-imap-utils.c24
2 files changed, 19 insertions, 6 deletions
diff --git a/camel/providers/imap/camel-imap-command.c b/camel/providers/imap/camel-imap-command.c
index 6dae25af85..9dcc56cbf8 100644
--- a/camel/providers/imap/camel-imap-command.c
+++ b/camel/providers/imap/camel-imap-command.c
@@ -720,6 +720,7 @@ imap_command_strdup_vprintf (CamelImapStore *store, const char *fmt,
strlen (string), string);
} else {
char *quoted = imap_quote_string (string);
+
op += sprintf (op, "%s", quoted);
g_free (quoted);
}
diff --git a/camel/providers/imap/camel-imap-utils.c b/camel/providers/imap/camel-imap-utils.c
index 648712a6ad..a449ea228d 100644
--- a/camel/providers/imap/camel-imap-utils.c
+++ b/camel/providers/imap/camel-imap-utils.c
@@ -549,6 +549,17 @@ imap_parse_body (char **body_p, CamelFolder *folder,
*body_p = body;
}
+static void
+strip (char *str, char c)
+{
+ char *src, *dst;
+
+ for (src = dst = str; *src; src++)
+ if (*src != c)
+ *dst++ = *src;
+ *dst = '\0';
+}
+
/**
* imap_quote_string:
* @str: the string to quote, which must not contain CR or LF
@@ -563,6 +574,8 @@ imap_quote_string (const char *str)
char *quoted, *q;
int len;
+ g_assert (strchr (str, '\r') == NULL);
+
len = strlen (str);
p = str;
while ((p = strpbrk (p, "\"\\"))) {
@@ -572,14 +585,13 @@ imap_quote_string (const char *str)
quoted = q = g_malloc (len + 3);
*q++ = '"';
- while ((p = strpbrk (str, "\"\\"))) {
- memcpy (q, str, p - str);
- q += p - str;
- *q++ = '\\';
+ for (p = str; *p; ) {
+ if (strchr ("\"\\", *p))
+ *q++ = '\\';
*q++ = *p++;
- str = p;
}
- sprintf (q, "%s\"", str);
+ *q++ = '"';
+ *q = '\0';
return quoted;
}