efba920
diff -up cyrus-sasl-2.1.22/saslauthd/auth_rimap.c.rimap cyrus-sasl-2.1.22/saslauthd/auth_rimap.c
efba920
--- cyrus-sasl-2.1.22/saslauthd/auth_rimap.c.rimap	2006-04-06 22:19:54.000000000 +0200
efba920
+++ cyrus-sasl-2.1.22/saslauthd/auth_rimap.c	2008-07-01 22:48:09.000000000 +0200
efba920
@@ -163,6 +163,7 @@ qstring (
efba920
     p1 = s;
efba920
     while ((p1 = strchr(p1, '"')) != NULL) {
efba920
 	num_quotes++;
efba920
+	++p1;
efba920
     }
efba920
     
efba920
     if (!num_quotes) {
efba920
@@ -198,7 +199,7 @@ qstring (
efba920
 	}
efba920
 	*p2++ = *p1++;
efba920
     }
efba920
-    strcat(p2, "\"");
efba920
+    strcpy(p2, "\"");
efba920
     return c;
efba920
 }
efba920
 
efba920
@@ -438,7 +439,7 @@ auth_rimap (
efba920
 	syslog(LOG_WARNING, "auth_rimap: writev: %m");
efba920
 	memset(qlogin, 0, strlen(qlogin));
efba920
 	free(qlogin);
efba920
-	memset(qpass, 0, strlen(qlogin));
efba920
+	memset(qpass, 0, strlen(qpass));
efba920
 	free(qpass);
efba920
 	(void)close(s);
efba920
 	return strdup(RESP_IERROR);
efba920
@@ -447,7 +448,7 @@ auth_rimap (
efba920
     /* don't need these any longer */
efba920
     memset(qlogin, 0, strlen(qlogin));
efba920
     free(qlogin);
efba920
-    memset(qpass, 0, strlen(qlogin));
efba920
+    memset(qpass, 0, strlen(qpass));
efba920
     free(qpass);
efba920
 
efba920
     /* read and parse the LOGIN response */