if ( (ret->cm_fields['M'] == NULL) && (with_body) ) {
dmsgtext = cdb_fetch(CDB_BIGMSGS, &msgnum, sizeof(long));
if (dmsgtext != NULL) {
- ret->cm_fields['M'] = strdup(dmsgtext->ptr);
+ ret->cm_fields['M'] = dmsgtext->ptr;
+ dmsgtext->ptr = NULL;
cdb_free(dmsgtext);
}
}
char *qp_encode_email_addrs(char *source)
{
- char user[256], node[256], name[256];
+ char *user, *node, *name;
const char headerStr[] = "=?UTF-8?Q?";
char *Encoded;
char *EncodedName;
for (i = 0; i < nColons; i++)
source[AddrPtr[i]++] = '\0';
+ /* TODO: if libidn, this might get larger*/
+ user = malloc(SourceLen + 1);
+ node = malloc(SourceLen + 1);
+ name = malloc(SourceLen + 1);
nPtr = Encoded;
*nPtr = '\0';
}
for (i = 0; i < nColons; i++)
source[--AddrPtr[i]] = ',';
+
+ free(user);
+ free(node);
+ free(name);
free(AddrUtf8);
free(AddrPtr);
return Encoded;
int crlf, /* Use CRLF newlines instead of LF? */
int flags /* should the bessage be exported clean? */
) {
- int i, j, k;
+ int i, j, k, n;
char buf[SIZ];
cit_uint8_t ch, prev_ch;
char allkeys[30];
}
/* Now spew the header fields in the order we like them. */
- safestrncpy(allkeys, FORDER, sizeof allkeys);
- for (i=0; i<strlen(allkeys); ++i) {
+ n = safestrncpy(allkeys, FORDER, sizeof allkeys);
+ for (i=0; i<n; ++i) {
k = (int) allkeys[i];
if (k != 'M') {
if ( (TheMessage->cm_fields[k] != NULL)
}
else if (mode == MT_RFC822) { /* unparsed RFC822 dump */
int eoh = 0;
+ const char *StartOfText = StrBufNOTNULL;
char outbuf[1024];
int outlen = 0;
int nllen = strlen(nl);
- prev_ch = 0;
+ prev_ch = '\0';
while (*mptr != '\0') {
if (*mptr == '\r') {
/* do nothing */
eoh = (*(mptr+1) == '\r') && (*(mptr+2) == '\n');
if (!eoh)
eoh = *(mptr+1) == '\n';
+ if (eoh)
+ {
+ StartOfText = mptr;
+ StartOfText = strchr(StartOfText, '\n');
+ StartOfText = strchr(StartOfText, '\n');
+ }
}
-
- if (
- ((headers_only == HEADERS_NONE) && (eoh))
- || ((headers_only == HEADERS_ONLY) && (!eoh))
- || ((headers_only != HEADERS_NONE) && (headers_only != HEADERS_ONLY))
+ if (((headers_only == HEADERS_NONE) && (mptr >= StartOfText)) ||
+ ((headers_only == HEADERS_ONLY) && (mptr < StartOfText)) ||
+ ((headers_only != HEADERS_NONE) &&
+ (headers_only != HEADERS_ONLY))
) {
if (*mptr == '\n') {
memcpy(&outbuf[outlen], nl, nllen);
}
if (flags & ESC_DOT)
{
- if ((prev_ch == '\n') && (*mptr == '.') && ((*(mptr+1) == '\r') || (*(mptr+1) == '\n')))
+ if ((prev_ch == '\n') &&
+ (*mptr == '.') &&
+ ((*(mptr+1) == '\r') || (*(mptr+1) == '\n')))
{
outbuf[outlen++] = '.';
}
+ prev_ch = *mptr;
}
- prev_ch = *mptr;
++mptr;
if (outlen > 1000) {
client_write(outbuf, outlen);
}
-
/*
* display a message (mode 0 - Citadel proprietary)
*/
char *hold_R, *hold_D;
char *collected_addresses = NULL;
struct addresses_to_be_filed *aptr = NULL;
- char *saved_rfc822_version = NULL;
+ StrBuf *saved_rfc822_version = NULL;
int qualified_for_journaling = 0;
CitContext *CCC = CC; /* CachedCitContext - performance boost */
char bounce_to[1024] = "";
CtdlLogPrintf(CTDL_ALERT, "CCC->redirect_buffer is not NULL during message submission!\n");
abort();
}
- CCC->redirect_buffer = malloc(SIZ);
- CCC->redirect_len = 0;
- CCC->redirect_alloc = SIZ;
+ CCC->redirect_buffer = NewStrBufPlain(NULL, SIZ);
CtdlOutputPreLoadedMsg(msg, MT_RFC822, HEADERS_ALL, 0, 1, QP_EADDR);
- smi.meta_rfc822_length = CCC->redirect_len;
+ smi.meta_rfc822_length = StrLength(CCC->redirect_buffer);
saved_rfc822_version = CCC->redirect_buffer;
CCC->redirect_buffer = NULL;
- CCC->redirect_len = 0;
- CCC->redirect_alloc = 0;
PutMetaData(&smi);
JournalBackgroundSubmit(msg, saved_rfc822_version, recps);
}
else {
- free(saved_rfc822_version);
+ FreeStrBuf(&saved_rfc822_version);
}
}