[dovecot-cvs] dovecot/src/lib strescape.c,1.4,1.5 strescape.h,1.4,1.5

cras at procontrol.fi cras at procontrol.fi
Wed Apr 2 06:05:40 EEST 2003


Update of /home/cvs/dovecot/src/lib
In directory danu:/tmp/cvs-serv7538/lib

Modified Files:
	strescape.c strescape.h 
Log Message:
Mailbox names are now sent through imap-quoter instead of just escaping it.
This means that mailbox names that would require escapes are instead sent
as literals now.



Index: strescape.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib/strescape.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- strescape.c	20 Feb 2003 16:30:51 -0000	1.4
+++ strescape.c	2 Apr 2003 02:05:38 -0000	1.5
@@ -27,28 +27,28 @@
 
 const char *str_escape(const char *str)
 {
-	char *ret, *p;
-	size_t i, esc;
+	const char *p;
+	string_t *ret;
 
-	/* get length of string and number of chars to escape */
-	esc = 0;
-	for (i = 0; str[i] != '\0'; i++) {
-		if (IS_ESCAPED_CHAR(str[i]))
-			esc++;
+	/* see if we need to quote it */
+	for (p = str; *p != '\0'; p++) {
+		if (IS_ESCAPED_CHAR(*p))
+			break;
 	}
 
-	if (esc == 0)
+	if (*p == '\0')
 		return str;
 
-	/* @UNSAFE: escape them */
-	p = ret = t_malloc(i + esc + 1);
-	for (; *str != '\0'; str++) {
-		if (IS_ESCAPED_CHAR(*str))
-			*p++ = '\\';
-		*p++ = *str;
+	/* quote */
+	ret = t_str_new((size_t) (p - str) + 128);
+	str_append_n(ret, str, (size_t) (p - str));
+
+	for (; *p != '\0'; p++) {
+		if (IS_ESCAPED_CHAR(*p))
+			str_append_c(ret, '\\');
+		str_append_c(ret, *p);
 	}
-	*p = '\0';
-	return ret;
+	return str_c(ret);
 }
 
 void str_append_unescaped(string_t *dest, const void *src, size_t src_size)

Index: strescape.h
===================================================================
RCS file: /home/cvs/dovecot/src/lib/strescape.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- strescape.h	20 Feb 2003 16:30:51 -0000	1.4
+++ strescape.h	2 Apr 2003 02:05:38 -0000	1.5
@@ -1,9 +1,9 @@
 #ifndef __STRESCAPE_H
 #define __STRESCAPE_H
 
-#define IS_ESCAPED_CHAR(c) ((c) == '"' || (c) == '\\')
+#define IS_ESCAPED_CHAR(c) ((c) == '"' || (c) == '\\' || (c) == '\'')
 
-/* escape all '\' and '"' characters */
+/* escape all '\', '"' and "'" characters */
 const char *str_escape(const char *str);
 
 /* remove all '\' characters, append to given string */




More information about the dovecot-cvs mailing list