X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=mts%2Fsmtp%2Fsmtp.c;h=13e8eff9dc352d59ff9a10f57074189f95a40d80;hb=757fa32156f812a166631942816e46e2138ebae3;hp=9527a5e1e8cfb1d0b082a22cc5426adf2ee5fbb7;hpb=386656ec3d9a80184f380a77169dc0a16bad89d5;p=mmh diff --git a/mts/smtp/smtp.c b/mts/smtp/smtp.c index 9527a5e..13e8eff 100644 --- a/mts/smtp/smtp.c +++ b/mts/smtp/smtp.c @@ -1246,7 +1246,7 @@ sm_auth_sasl(char *user, char *mechlist, char *host) result = sasl_decode64(sm_reply.text, sm_reply.length, outbuf, sizeof(outbuf), &outlen); - if (result != SASL_OK && result != SASL_CONTINUE) { + if (result != SASL_OK) { smtalk(SM_AUTH, "*"); sm_ierror("SASL base64 decode failed: %s", sasl_errstring(result, NULL, NULL)); @@ -1688,15 +1688,17 @@ sm_rrecord (char *buffer, int *len) fgets (buffer, BUFSIZ, sm_rfp); *len = strlen (buffer); - if (ferror (sm_rfp) || feof (sm_rfp)) + /* *len should be >0 except on EOF, but check for safety's sake */ + if (ferror (sm_rfp) || feof (sm_rfp) || (*len == 0)) return sm_rerror (); if (buffer[*len - 1] != '\n') while (getc (sm_rfp) != '\n' && !ferror (sm_rfp) && !feof (sm_rfp)) continue; else - if (buffer[*len - 2] == '\r') + if ((*len > 1) && (buffer[*len - 2] == '\r')) *len -= 1; - buffer[*len - 1] = 0; + *len -= 1; + buffer[*len] = 0; return OK; }