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