struct wc_attachment *att;
char *encoded;
size_t encoded_length;
+ size_t encoded_strlen;
/** RFC2045 requires this, and some clients look for it... */
serv_puts("MIME-Version: 1.0");
encoded_length = ((att->length * 150) / 100);
encoded = malloc(encoded_length);
if (encoded == NULL) break;
- CtdlEncodeBase64(encoded, att->data, att->length, 1);
+ encoded_strlen = CtdlEncodeBase64(&encoded, att->data, att->length, &encoded_length, 1);
serv_printf("--%s", boundary);
serv_printf("Content-type: %s", att->content_type);
"filename=\"%s\"", att->filename);
serv_puts("Content-transfer-encoding: base64");
serv_puts("");
- serv_write(encoded, strlen(encoded));
+ serv_write(encoded, encoded_strlen);
serv_puts("");
serv_puts("");
free(encoded);
char buf[256];
char fname[256];
char rule[2048];
- char encoded_rule[4096];
+ char encoded_rule;
char my_addresses[4096];
+ long encoded_len;
+ encoded_len = 4096;
+ encoded_rule = (char*) malloc (encoded_len);
/* Enumerate my email addresses in case they are needed for a vacation rule */
my_addresses[0] = 0;
serv_puts("GVEA");
redirect, automsg, final
);
- CtdlEncodeBase64(encoded_rule, rule, strlen(rule)+1, 0);
+ CtdlEncodeBase64(&encoded_rule, rule, strlen(rule)+1, &encoded_len, 0);
serv_printf("# WEBCIT_RULE|%d|%s|", i, encoded_rule);
output_sieve_rule(hfield, compare, htext, sizecomp, sizeval,
action, fileinto, redirect, automsg, final, my_addresses);
serv_puts("stop;");
serv_puts("000");
-
+ free(encoded_rule);
}
*/
long extract_token(char *dest, const char *source, int parmnum, char separator, int maxlen)
{
- const char *s; /* source */
- int len = 0; /* running total length of extracted string */
- int current_token = 0; /* token currently being processed */
+ const char *s; //* source * /
+ int len = 0; //* running total length of extracted string * /
+ int current_token = 0; //* token currently being processed * /
s = source;
return(-1);
}
+// cit_backtrace();
+// lprintf (CTDL_DEBUG, "test >: n: %d sep: %c source: %s \n willi \n", parmnum, separator, source);
dest[0] = 0;
if (s == NULL) {
if (*s == separator) {
++current_token;
}
- else if ( (current_token == parmnum) && (len < maxlen) ) {
+ if ( (current_token == parmnum) &&
+ (*s != separator) &&
+ (len < maxlen) ) {
dest[len] = *s;
++len;
}
+ else if ((current_token > parmnum) || (len >= maxlen)) {
+ break;
+ }
++s;
}
- dest[len] = 0;
- if (current_token < parmnum) return(-1);
+ dest[len] = '\0';
+ if (current_token < parmnum) {
+// lprintf (CTDL_DEBUG,"test <!: %s\n", dest);
+ return(-1);
+ }
+// lprintf (CTDL_DEBUG,"test <: %d; %s\n", len, dest);
return(len);
}
+//*/
/**
* \param dest encrypted string
* \param source the string to encrypt
* \param sourcelen the length of the source data (may contain string terminators)
+ * \return the length of the encoded string.
*/
-void CtdlEncodeBase64(char *dest, const char *source, size_t sourcelen, int linebreaks)
+size_t CtdlEncodeBase64(char **pdest, const char *source, size_t sourcelen, size_t *destlen, int linebreaks)
{
int i, hiteof = FALSE;
int spos = 0;
int dpos = 0;
int thisline = 0;
+ char *dest;
+
+ dest = *pdest;
/** Fill dtable with character encodings. */
}
}
for (i = 0; i < 4; i++) {
+ if (dpos > *destlen)
+ {
+ int newlen;
+ char *newbuf;
+ newlen = *destlen + *destlen / 2;
+ newbuf = (char*) malloc(newlen);
+ memcpy(newbuf, dest, *destlen);
+ *pdest = dest = newbuf;
+ *destlen = newlen;
+ }
dest[dpos++] = ogroup[i];
dest[dpos] = 0;
}
thisline += 4;
if ( (linebreaks) && (thisline > 70) ) {
+ if (dpos + 3 > *destlen)
+ {
+ int newlen;
+ char *newbuf;
+ newlen = *destlen + *destlen / 2;
+ newbuf = (char*) malloc(newlen);
+ memcpy(newbuf, dest, *destlen);
+ *pdest = dest = newbuf;
+ *destlen = newlen;
+ }
dest[dpos++] = '\r';
dest[dpos++] = '\n';
dest[dpos] = 0;
}
}
if ( (linebreaks) && (thisline > 70) ) {
+ if (dpos + 3 > *destlen)
+ {
+ int newlen;
+ char *newbuf;
+ newlen = *destlen + 5;
+ newbuf = (char*) malloc(newlen);
+ memcpy(newbuf, dest, *destlen);
+ *pdest = dest = newbuf;
+ *destlen = newlen;
+ }
dest[dpos++] = '\r';
dest[dpos++] = '\n';
dest[dpos] = 0;
thisline = 0;
}
+ return dpos;
}
void free_calendar_buffer(void);
void calendar_summary_view(void);
int load_msg_ptrs(char *servcmd, int with_headers);
-void CtdlEncodeBase64(char *dest, const char *source, size_t sourcelen, int linebreaks);
+size_t CtdlEncodeBase64(char **dest, const char *source, size_t sourcelen, size_t *destlen, int linebreaks);
int CtdlDecodeBase64(char *dest, const char *source, size_t length);
void free_attachments(struct wcsession *sess);
void free_march_list(struct wcsession *wcf);