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 */