X-Git-Url: https://code.citadel.org/?p=citadel.git;a=blobdiff_plain;f=citadel%2Fmodules%2Fimap%2Fserv_imap.c;fp=citadel%2Fmodules%2Fimap%2Fserv_imap.c;h=d33e66ee65ef2ce885e7a4338b2bb5d0a317834c;hp=4b3e146cef6f40ef696311400cf4627811fe8f28;hb=f267427a9cd245b476406f82823502f4279f450b;hpb=3a78b645b93edfaf7b8f31b3156372c3308f5531 diff --git a/citadel/modules/imap/serv_imap.c b/citadel/modules/imap/serv_imap.c index 4b3e146ce..d33e66ee6 100644 --- a/citadel/modules/imap/serv_imap.c +++ b/citadel/modules/imap/serv_imap.c @@ -708,26 +708,36 @@ void imap_auth_plain(void) char user[256] = ""; char pass[256] = ""; int result; + long decoded_len; long len; memset(pass, 0, sizeof(pass)); - len = StrBufDecodeBase64(Imap->Cmd.CmdBuf); + decoded_len = StrBufDecodeBase64(Imap->Cmd.CmdBuf); - if (len > 0) + if (decoded_len > 0) { decoded_authstring = ChrPtr(Imap->Cmd.CmdBuf); len = safestrncpy(ident, decoded_authstring, sizeof ident); + decoded_len -= len - 1; decoded_authstring += len + 1; - len = safestrncpy(user, decoded_authstring, sizeof user); + if (decoded_len > 0) + { + len = safestrncpy(user, decoded_authstring, sizeof user); - decoded_authstring += len + 1; + decoded_authstring += len + 1; + decoded_len -= len - 1; + } - len = safestrncpy(pass, decoded_authstring, sizeof pass); - if (len < 0) - len = sizeof(pass) - 1; + if (decoded_len > 0) + { + len = safestrncpy(pass, decoded_authstring, sizeof pass); + + if (len < 0) + len = sizeof(pass) - 1; + } } Imap->authstate = imap_as_normal;