Protect against either of the types being NULL.

2001-12-04  Jeffrey Stedfast  <fejj@ximian.com>

	* camel-mime-utils.c (header_content_type_simple): Protect against
	either of the types being NULL.

2001-12-05  Jeffrey Stedfast  <fejj@ximian.com>

	* camel-mime-filter-basic.c (filter): If complete() allocates
	len+2 bytes for the out buffer, so should this. See bug #16371 for
	an example case.

2001-12-05  Jeffrey Stedfast  <fejj@ximian.com>

	* camel-sasl-digest-md5.c: iconv() returns a size_t, not an int.

	* camel-pgp-context.c: The return value of iconv() is a size_t,
	not an int.

	* camel-mime-part-utils.c (convert_buffer): Always use size_t args
	for iconv().

	* camel-mime-filter-charset.c (complete): Always use size_t args
	for iconv().
	(filter): Same.

	* camel-mime-utils.c (header_address_fold): Make headerlen a
	size_t instead of an int.
	(header_fold): Same.
	(base64_encode_close): We should be returning a size_t and inlen
	should also be a size_t.
	(base64_encode_step): Same here.
	(base64_decode_step): Here too.
	(base64_encode_simple): And here...
	(base64_decode_simple): Same.
	(uuencode_close): We should also use size_t's here...
	(uuencode_step): And here too.
	(uudecode_step): And also here.
	(quoted_encode_close): Same idea here.
	(quoted_encode_step): Again here.
	(quoted_decode_step): Here too.
	(quoted_encode): Input length should be a size_t.
	(rfc2047_decode_word): Same.
	(g_string_append_len): Here too.
	(append_8bit): "
	(rfc2047_encode_word): "
	(quote_word): "
	(hex_decode): "
	(rfc2184_decode): Use size_t's with iconv().
	(header_decode_param): Same.

svn path=/trunk/; revision=14956
This commit is contained in:
Jeffrey Stedfast
2001-12-10 19:14:32 +00:00
committed by Jeffrey Stedfast
parent bc9bb5281b
commit 081f6dbb1b
11 changed files with 171 additions and 110 deletions

View File

@ -1,3 +1,53 @@
2001-12-04 Jeffrey Stedfast <fejj@ximian.com>
* camel-mime-utils.c (header_content_type_simple): Protect against
either of the types being NULL.
2001-12-05 Jeffrey Stedfast <fejj@ximian.com>
* camel-mime-filter-basic.c (filter): If complete() allocates
len+2 bytes for the out buffer, so should this. See bug #16371 for
an example case.
2001-12-05 Jeffrey Stedfast <fejj@ximian.com>
* camel-sasl-digest-md5.c: iconv() returns a size_t, not an int.
* camel-pgp-context.c: The return value of iconv() is a size_t,
not an int.
* camel-mime-part-utils.c (convert_buffer): Always use size_t args
for iconv().
* camel-mime-filter-charset.c (complete): Always use size_t args
for iconv().
(filter): Same.
* camel-mime-utils.c (header_address_fold): Make headerlen a
size_t instead of an int.
(header_fold): Same.
(base64_encode_close): We should be returning a size_t and inlen
should also be a size_t.
(base64_encode_step): Same here.
(base64_decode_step): Here too.
(base64_encode_simple): And here...
(base64_decode_simple): Same.
(uuencode_close): We should also use size_t's here...
(uuencode_step): And here too.
(uudecode_step): And also here.
(quoted_encode_close): Same idea here.
(quoted_encode_step): Again here.
(quoted_decode_step): Here too.
(quoted_encode): Input length should be a size_t.
(rfc2047_decode_word): Same.
(g_string_append_len): Here too.
(append_8bit): "
(rfc2047_encode_word): "
(quote_word): "
(hex_decode): "
(rfc2184_decode): Use size_t's with iconv().
(header_decode_param): Same.
2001-12-09 Jon Trowbridge <trow@ximian.com>
* camel-folder-summary.c: Add "NeedsReply" to the flag_names array

View File

@ -28,8 +28,6 @@
#include <glib.h>
#include <iconv.h>
#ifdef ENABLE_THREADS
#include <pthread.h>
#define CIPHER_LOCK(ctx) g_mutex_lock (((CamelCipherContext *) ctx)->priv->lock)

View File

@ -96,7 +96,7 @@ static void
complete(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, size_t *outlen, size_t *outprespace)
{
CamelMimeFilterBasic *f = (CamelMimeFilterBasic *)mf;
int newlen;
size_t newlen;
switch(f->type) {
case CAMEL_MIME_FILTER_BASIC_BASE64_ENC:
@ -160,8 +160,8 @@ static void
filter(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, size_t *outlen, size_t *outprespace)
{
CamelMimeFilterBasic *f = (CamelMimeFilterBasic *)mf;
int newlen;
size_t newlen;
switch(f->type) {
case CAMEL_MIME_FILTER_BASIC_BASE64_ENC:
/* wont go to more than 2x size (overly conservative) */
@ -188,9 +188,9 @@ filter(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, s
break;
case CAMEL_MIME_FILTER_BASIC_QP_DEC:
/* output can't possibly exceed the input size */
camel_mime_filter_set_size(mf, len, FALSE);
camel_mime_filter_set_size(mf, len + 2, FALSE);
newlen = quoted_decode_step(in, len, mf->outbuf, &f->state, &f->save);
g_assert(newlen <= len);
g_assert(newlen <= len + 2);
break;
case CAMEL_MIME_FILTER_BASIC_UU_DEC:
if (!f->uu_begin) {

View File

@ -74,7 +74,7 @@ reset(CamelMimeFilter *mf)
CamelMimeFilterCharset *f = (CamelMimeFilterCharset *)mf;
char buf[16];
char *buffer;
int outlen = 16;
size_t outlen = 16;
/* what happens with the output bytes if this resets the state? */
if (f->ic != (iconv_t) -1) {
@ -87,11 +87,10 @@ static void
complete(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, size_t *outlenptr, size_t *outprespace)
{
CamelMimeFilterCharset *f = (CamelMimeFilterCharset *)mf;
int converted;
size_t converted, inlen, outlen;
const char *inbuf;
char *outbuf;
int inlen, outlen;
if (f->ic == (iconv_t) -1) {
goto donothing;
}
@ -110,7 +109,7 @@ complete(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out,
if (inlen>0) {
converted = e_iconv(f->ic, &inbuf, &inlen, &outbuf, &outlen);
if (converted == -1) {
if (converted == (size_t) -1) {
if (errno != EINVAL) {
g_warning("error occured converting: %s", strerror(errno));
goto donothing;
@ -125,7 +124,7 @@ complete(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out,
/* this 'resets' the output stream, returning back to the initial
shift state for multishift charactersets */
converted = e_iconv(f->ic, NULL, 0, &outbuf, &outlen);
if (converted == -1) {
if (converted == (size_t) -1) {
g_warning("Conversion failed to complete: %s", strerror(errno));
}
@ -153,10 +152,9 @@ static void
filter(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, size_t *outlenptr, size_t *outprespace)
{
CamelMimeFilterCharset *f = (CamelMimeFilterCharset *)mf;
int converted;
size_t converted, inlen, outlen;
const char *inbuf;
char *outbuf;
int inlen, outlen;
if (f->ic == (iconv_t) -1) {
goto donothing;
@ -169,7 +167,7 @@ filter(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, s
outbuf = mf->outbuf;
outlen = mf->outsize;
converted = e_iconv(f->ic, &inbuf, &inlen, &outbuf, &outlen);
if (converted == -1) {
if (converted == (size_t) -1) {
if (errno != EINVAL) {
g_warning("error occured converting: %s", strerror(errno));
goto donothing;

View File

@ -41,12 +41,12 @@ struct _CamelMimeFilter {
char *outreal; /* real malloc'd buffer */
char *outbuf; /* first 'writable' position allowed (outreal + outpre) */
char *outptr;
int outsize;
int outpre; /* prespace of this buffer */
size_t outsize;
size_t outpre; /* prespace of this buffer */
char *backbuf;
int backsize;
int backlen; /* significant data there */
size_t backsize;
size_t backlen; /* significant data there */
};
struct _CamelMimeFilterClass {

View File

@ -101,10 +101,11 @@ static GByteArray *
convert_buffer (GByteArray *in, const char *to, const char *from)
{
iconv_t ic;
int inlen, outlen, i=2;
size_t inlen, outlen;
char *inbuf, *outbuf;
char *buffer;
GByteArray *out = NULL;
int i = 2;
d(printf("converting buffer from %s to %s: '%.*s'\n", from, to, (int)in->len, in->data));
@ -123,7 +124,7 @@ convert_buffer (GByteArray *in, const char *to, const char *from)
inlen = in->len;
outbuf = buffer;
if (e_iconv(ic, (const char **)&inbuf, &inlen, &outbuf, &outlen) == -1) {
if (e_iconv(ic, (const char **)&inbuf, &inlen, &outbuf, &outlen) == (size_t) -1) {
g_free(buffer);
g_warning("conversion failed: %s", strerror(errno));
/* we didn't have enough space */
@ -140,7 +141,7 @@ convert_buffer (GByteArray *in, const char *to, const char *from)
/* close off the conversion */
outbuf = buffer;
outlen = in->len * i + 16;
if (e_iconv(ic, NULL, 0, &outbuf, &outlen) != -1)
if (e_iconv(ic, NULL, 0, &outbuf, &outlen) != (size_t) -1)
g_byte_array_append(out, buffer, (in->len*i+16) - outlen);
g_free(buffer);
@ -157,7 +158,7 @@ convert_buffer (GByteArray *in, const char *to, const char *from)
static gboolean
is_7bit (GByteArray *buffer)
{
register int i;
register unsigned int i;
for (i = 0; i < buffer->len; i++)
if (buffer->data[i] > 127)

View File

@ -206,8 +206,8 @@ base64_init(void)
/* call this when finished encoding everything, to
flush off the last little bit */
int
base64_encode_close(unsigned char *in, int inlen, gboolean break_lines, unsigned char *out, int *state, int *save)
size_t
base64_encode_close(unsigned char *in, size_t inlen, gboolean break_lines, unsigned char *out, int *state, int *save)
{
int c1, c2;
unsigned char *outptr = out;
@ -251,8 +251,8 @@ base64_encode_close(unsigned char *in, int inlen, gboolean break_lines, unsigned
output at a time, saves left-over state in state and save (initialise to
0 on first invocation).
*/
int
base64_encode_step(unsigned char *in, int len, gboolean break_lines, unsigned char *out, int *state, int *save)
size_t
base64_encode_step(unsigned char *in, size_t len, gboolean break_lines, unsigned char *out, int *state, int *save)
{
register unsigned char *inptr, *outptr;
@ -337,8 +337,8 @@ base64_encode_step(unsigned char *in, int len, gboolean break_lines, unsigned ch
*
* Decodes a chunk of base64 encoded data
**/
int
base64_decode_step(unsigned char *in, int len, unsigned char *out, int *state, unsigned int *save)
size_t
base64_decode_step(unsigned char *in, size_t len, unsigned char *out, int *state, unsigned int *save)
{
register unsigned char *inptr, *outptr;
unsigned char *inend, c;
@ -386,7 +386,7 @@ base64_decode_step(unsigned char *in, int len, unsigned char *out, int *state, u
}
char *
base64_encode_simple (const char *data, int len)
base64_encode_simple (const char *data, size_t len)
{
unsigned char *out;
int state = 0, outlen;
@ -399,8 +399,8 @@ base64_encode_simple (const char *data, int len)
return (char *)out;
}
int
base64_decode_simple (char *data, int len)
size_t
base64_decode_simple (char *data, size_t len)
{
int state = 0;
unsigned int save = 0;
@ -424,8 +424,8 @@ base64_decode_simple (char *data, int len)
* encoding data with uuencode_step to flush off the last little
* bit.
**/
int
uuencode_close (unsigned char *in, int len, unsigned char *out, unsigned char *uubuf, int *state, guint32 *save, char *uulen)
size_t
uuencode_close (unsigned char *in, size_t len, unsigned char *out, unsigned char *uubuf, int *state, guint32 *save, char *uulen)
{
register unsigned char *outptr, *bufptr;
register guint32 saved;
@ -497,8 +497,8 @@ uuencode_close (unsigned char *in, int len, unsigned char *out, unsigned char *u
* left-over state in @uubuf, @state and @save (initialize to 0 on first
* invocation).
**/
int
uuencode_step (unsigned char *in, int len, unsigned char *out, unsigned char *uubuf, int *state, guint32 *save, char *uulen)
size_t
uuencode_step (unsigned char *in, size_t len, unsigned char *out, unsigned char *uubuf, int *state, guint32 *save, char *uulen)
{
register unsigned char *inptr, *outptr, *bufptr;
unsigned char *inend;
@ -575,8 +575,8 @@ uuencode_step (unsigned char *in, int len, unsigned char *out, unsigned char *uu
* a chunk of uuencoded data. Assumes the "begin <mode> <file name>"
* line has been stripped off.
**/
int
uudecode_step (unsigned char *in, int len, unsigned char *out, int *state, guint32 *save, char *uulen)
size_t
uudecode_step (unsigned char *in, size_t len, unsigned char *out, int *state, guint32 *save, char *uulen)
{
register unsigned char *inptr, *outptr;
unsigned char *inend, ch;
@ -652,8 +652,8 @@ uudecode_step (unsigned char *in, int len, unsigned char *out, int *state, guint
/* complete qp encoding */
int
quoted_encode_close(unsigned char *in, int len, unsigned char *out, int *state, int *save)
size_t
quoted_encode_close(unsigned char *in, size_t len, unsigned char *out, int *state, int *save)
{
register unsigned char *outptr = out;
int last;
@ -681,11 +681,11 @@ quoted_encode_close(unsigned char *in, int len, unsigned char *out, int *state,
}
/* perform qp encoding, initialise state to -1 and save to 0 on first invocation */
int
quoted_encode_step (unsigned char *in, int len, unsigned char *out, int *statep, int *save)
size_t
quoted_encode_step (unsigned char *in, size_t len, unsigned char *out, int *statep, int *save)
{
register guchar *inptr, *outptr, *inend;
guchar c;
unsigned char c;
register int sofar = *save; /* keeps track of how many chars on a line */
register int last = *statep; /* keeps track if last char to end was a space cr etc */
@ -767,8 +767,8 @@ quoted_encode_step (unsigned char *in, int len, unsigned char *out, int *statep,
Note: Trailing rubbish (at the end of input), like = or =x or =\r will be lost.
*/
int
quoted_decode_step(unsigned char *in, int len, unsigned char *out, int *savestate, int *saveme)
size_t
quoted_decode_step(unsigned char *in, size_t len, unsigned char *out, int *savestate, int *saveme)
{
register unsigned char *inptr, *outptr;
unsigned char *inend, c;
@ -860,7 +860,7 @@ quoted_decode_step(unsigned char *in, int len, unsigned char *out, int *savestat
which is slightly different than plain quoted-printable (mainly by allowing 0x20 <> _)
*/
static int
quoted_decode(const unsigned char *in, int len, unsigned char *out)
quoted_decode(const unsigned char *in, size_t len, unsigned char *out)
{
register const unsigned char *inptr;
register unsigned char *outptr;
@ -907,7 +907,7 @@ quoted_decode(const unsigned char *in, int len, unsigned char *out)
/* safemask is the mask to apply to the camel_mime_special_table to determine what
characters can safely be included without encoding */
static int
quoted_encode(const unsigned char *in, int len, unsigned char *out, unsigned short safemask)
quoted_encode (const unsigned char *in, size_t len, unsigned char *out, unsigned short safemask)
{
register const unsigned char *inptr, *inend;
unsigned char *outptr;
@ -971,7 +971,7 @@ header_decode_lwsp(const char **in)
/* decode rfc 2047 encoded string segment */
static char *
rfc2047_decode_word(const char *in, int len)
rfc2047_decode_word(const char *in, size_t len)
{
const char *inptr = in+2;
const char *inend = in+len-2;
@ -979,12 +979,12 @@ rfc2047_decode_word(const char *in, int len)
const char *charset;
char *encname, *p;
int tmplen;
int ret;
size_t ret;
char *decword = NULL;
char *decoded = NULL;
char *outbase = NULL;
char *outbuf;
int inlen, outlen;
size_t inlen, outlen;
gboolean retried = FALSE;
iconv_t ic;
@ -1049,9 +1049,9 @@ rfc2047_decode_word(const char *in, int len)
retry:
ic = e_iconv_open ("UTF-8", charset);
if (ic != (iconv_t)-1) {
if (ic != (iconv_t) -1) {
ret = e_iconv (ic, &inbuf, &inlen, &outbuf, &outlen);
if (ret >= 0) {
if (ret != (size_t) -1) {
e_iconv (ic, NULL, 0, &outbuf, &outlen);
*outbuf = 0;
decoded = g_strdup (outbase);
@ -1083,7 +1083,7 @@ rfc2047_decode_word(const char *in, int len)
/* grrr, glib should have this ! */
static GString *
g_string_append_len(GString *st, const char *s, int l)
g_string_append_len(GString *st, const char *s, size_t l)
{
char *tmp;
@ -1098,7 +1098,7 @@ g_string_append_len(GString *st, const char *s, int l)
according to the rfc's. Anyway, since the conversion to utf-8
is trivial, just do it here without iconv */
static GString *
append_latin1 (GString *out, const char *in, int len)
append_latin1 (GString *out, const char *in, size_t len)
{
unsigned int c;
@ -1116,10 +1116,10 @@ append_latin1 (GString *out, const char *in, int len)
}
static int
append_8bit (GString *out, const char *inbuf, int inlen, const char *charset)
append_8bit (GString *out, const char *inbuf, size_t inlen, const char *charset)
{
char *outbase, *outbuf;
int outlen;
size_t outlen;
iconv_t ic;
ic = e_iconv_open ("UTF-8", charset);
@ -1128,8 +1128,8 @@ append_8bit (GString *out, const char *inbuf, int inlen, const char *charset)
outlen = inlen * 6 + 16;
outbuf = outbase = g_malloc(outlen);
if (e_iconv(ic, &inbuf, &inlen, &outbuf, &outlen) == -1) {
if (e_iconv(ic, &inbuf, &inlen, &outbuf, &outlen) == (size_t) -1) {
w(g_warning("Conversion to '%s' failed: %s", charset, strerror(errno)));
g_free(outbase);
e_iconv_close(ic);
@ -1147,7 +1147,7 @@ append_8bit (GString *out, const char *inbuf, int inlen, const char *charset)
/* decodes a simple text, rfc822 + rfc2047 */
static char *
header_decode_text (const char *in, int inlen, const char *default_charset)
header_decode_text (const char *in, size_t inlen, const char *default_charset)
{
GString *out;
const char *inptr, *inend, *start, *chunk, *locale_charset;
@ -1214,7 +1214,7 @@ header_decode_string (const char *in, const char *default_charset)
/* FIXME: needs a way to cache iconv opens for different charsets? */
static void
rfc2047_encode_word(GString *outstring, const char *in, int len, const char *type, unsigned short safemask)
rfc2047_encode_word(GString *outstring, const char *in, size_t len, const char *type, unsigned short safemask)
{
iconv_t ic = (iconv_t *)-1;
char *buffer, *out, *ascii;
@ -1236,8 +1236,9 @@ rfc2047_encode_word(GString *outstring, const char *in, int len, const char *typ
ic = e_iconv_open (type, "UTF-8");
while (inlen) {
int convlen, i, proclen;
size_t convlen, proclen;
int i;
/* break up words into smaller bits, what we really want is encoded + overhead < 75,
but we'll just guess what that means in terms of input chars, and assume its good enough */
@ -1280,7 +1281,7 @@ rfc2047_encode_word(GString *outstring, const char *in, int len, const char *typ
hopefully-small-enough chunks, and leave it at that */
convlen = MIN(inlen, CAMEL_FOLD_PREENCODED);
p = inptr;
if (e_iconv(ic, &inptr, &convlen, &out, &outlen) == -1) {
if (e_iconv (ic, &inptr, &convlen, &out, &outlen) == (size_t) -1) {
w(g_warning("Conversion problem: conversion truncated: %s", strerror(errno)));
/* blah, we include it anyway, better than infinite loop ... */
inptr = p + convlen;
@ -1445,7 +1446,7 @@ header_encode_string (const unsigned char *in)
/* apply quoted-string rules to a string */
static void
quote_word(GString *out, gboolean do_quotes, const char *start, int len)
quote_word(GString *out, gboolean do_quotes, const char *start, size_t len)
{
int i, c;
@ -1634,7 +1635,7 @@ header_encode_phrase (const unsigned char *in)
wordl = words;
while (wordl) {
const char *start;
int len;
size_t len;
word = wordl->data;
@ -1728,7 +1729,7 @@ header_decode_quoted_string(const char **in)
{
const char *inptr = *in;
char *out = NULL, *outptr;
int outlen;
size_t outlen;
int c;
header_decode_lwsp(&inptr);
@ -1826,10 +1827,10 @@ header_decode_int(const char **in)
#define HEXVAL(c) (isdigit (c) ? (c) - '0' : tolower (c) - 'a' + 10)
static char *
hex_decode (const char *in, int len)
hex_decode (const char *in, size_t len)
{
const guchar *inend = (const guchar *) in + len;
guchar *inptr, *outptr;
const unsigned char *inend = in + len;
unsigned char *inptr, *outptr;
char *outbuf;
outptr = outbuf = g_malloc (len);
@ -1856,7 +1857,7 @@ hex_decode (const char *in, int len)
*/
static char *
rfc2184_decode (const char *in, int len)
rfc2184_decode (const char *in, size_t len)
{
const char *inptr = in;
const char *inend = in + len;
@ -1880,7 +1881,7 @@ rfc2184_decode (const char *in, int len)
if (inptr < inend) {
char *decword, *outbase, *outbuf;
const char *inbuf;
int inlen, outlen;
size_t inlen, outlen;
iconv_t ic;
inbuf = decword = hex_decode (inptr, inend - inptr);
@ -1888,13 +1889,13 @@ rfc2184_decode (const char *in, int len)
ic = e_iconv_open ("UTF-8", charset);
if (ic != (iconv_t) -1) {
int ret;
size_t ret;
outlen = inlen * 6 + 16;
outbuf = outbase = g_malloc (outlen);
ret = e_iconv (ic, &inbuf, &inlen, &outbuf, &outlen);
if (ret >= 0) {
if (ret != (size_t) -1) {
e_iconv (ic, NULL, 0, &outbuf, &outlen);
*outbuf = '\0';
g_free (decoded);
@ -2034,7 +2035,7 @@ header_decode_param (const char **in, char **paramp, char **valuep, int *is_rfc2
* locale and converting to utf8 */
char *outbase, *outbuf, *p;
const char *charset, *inbuf;
int inlen, outlen;
size_t inlen, outlen;
iconv_t ic;
inbuf = value;
@ -2043,13 +2044,13 @@ header_decode_param (const char **in, char **paramp, char **valuep, int *is_rfc2
charset = e_iconv_locale_charset ();
ic = e_iconv_open ("UTF-8", charset ? charset : "ISO-8859-1");
if (ic != (iconv_t) -1) {
int ret;
size_t ret;
outlen = inlen * 6 + 16;
outbuf = outbase = g_malloc (outlen);
ret = e_iconv (ic, &inbuf, &inlen, &outbuf, &outlen);
if (ret >= 0) {
if (ret != (size_t) -1) {
e_iconv (ic, NULL, 0, &outbuf, &outlen);
*outbuf = '\0';
}
@ -2362,8 +2363,9 @@ header_decode_mailbox(const char **in)
pre = header_decode_word(&inptr);
if (pre) {
int l = strlen(last);
int p = strlen(pre);
size_t l = strlen (last);
size_t p = strlen (pre);
/* dont append ' ' between sucsessive encoded words */
if ((l>6 && last[l-2] == '?' && last[l-1] == '=')
&& (p>6 && pre[0] == '=' && pre[1] == '?')) {
@ -2967,7 +2969,7 @@ header_param_list_format_append (GString *out, struct _header_param *p)
gboolean encoded = FALSE;
gboolean quote = FALSE;
int here = out->len;
int nlen, vlen;
size_t nlen, vlen;
char *value;
if (!p->value) {
@ -3158,9 +3160,19 @@ header_content_type_format(struct _header_content_type *ct)
}
char *
header_content_type_simple(struct _header_content_type *ct)
header_content_type_simple (struct _header_content_type *ct)
{
return g_strdup_printf("%s/%s", ct->type, ct->subtype);
if (ct->type == NULL) {
w(g_warning ("Content-Type with no main type"));
return g_strdup ("text/plain");
} else if (ct->subtype == NULL) {
w(g_warning ("Content-Type with no sub type: %s", ct->type));
if (!strcasecmp (ct->type, "multipart"))
return g_strdup_printf ("%s/mixed", ct->type);
else
return g_strdup (ct->type);
} else
return g_strdup_printf ("%s/%s", ct->type, ct->subtype);
}
char *
@ -3472,7 +3484,7 @@ void
header_raw_append_parse(struct _header_raw **list, const char *header, int offset)
{
register const char *in;
int fieldlen;
size_t fieldlen;
char *name;
in = header;
@ -3630,8 +3642,8 @@ header_msgid_generate (void)
#define COUNT_LOCK()
#define COUNT_UNLOCK()
#endif /* ENABLE_THREADS */
static gint count = 0;
gint hrv;
static int count = 0;
int hrv;
char *ret;
hrv = gethostname (host, sizeof (host));
@ -3935,13 +3947,13 @@ header_address_list_format(struct _header_address *a)
}
char *
header_address_fold (const char *in, int headerlen)
header_address_fold (const char *in, size_t headerlen)
{
int len, outlen, i;
size_t len, outlen;
const char *inptr = in, *space, *p, *n;
GString *out;
char *ret;
int needunfold = FALSE;
int i, needunfold = FALSE;
if (in == NULL)
return NULL;
@ -4011,9 +4023,9 @@ header_address_fold (const char *in, int headerlen)
/* simple header folding */
/* will work even if the header is already folded */
char *
header_fold(const char *in, int headerlen)
header_fold(const char *in, size_t headerlen)
{
int len, outlen, i;
size_t len, outlen, i;
const char *inptr = in, *space, *p, *n;
GString *out;
char *ret;

View File

@ -148,8 +148,8 @@ void header_raw_clear(struct _header_raw **list);
char *header_raw_check_mailing_list(struct _header_raw **list);
/* fold a header */
char *header_address_fold (const char *in, int headerlen);
char *header_fold (const char *in, int headerlen);
char *header_address_fold (const char *in, size_t headerlen);
char *header_fold (const char *in, size_t headerlen);
char *header_unfold (const char *in);
/* decode a header which is a simple token */
@ -186,23 +186,24 @@ char *header_location_decode(const char *in);
void header_mime_decode(const char *in, int *maj, int *min);
/* do incremental base64/quoted-printable (de/en)coding */
int base64_decode_step(unsigned char *in, int len, unsigned char *out, int *state, unsigned int *save);
size_t base64_decode_step(unsigned char *in, size_t len, unsigned char *out, int *state, unsigned int *save);
int base64_encode_step(unsigned char *in, int len, gboolean break_lines, unsigned char *out, int *state, int *save);
int base64_encode_close(unsigned char *in, int inlen, gboolean break_lines, unsigned char *out, int *state, int *save);
size_t base64_encode_step(unsigned char *in, size_t len, gboolean break_lines, unsigned char *out, int *state, int *save);
size_t base64_encode_close(unsigned char *in, size_t len, gboolean break_lines, unsigned char *out, int *state, int *save);
int uudecode_step (unsigned char *in, int len, unsigned char *out, int *state, guint32 *save, char *uulen);
int uuencode_step (unsigned char *in, int len, unsigned char *out, unsigned char *uubuf, int *state,
guint32 *save, char *uulen);
int uuencode_close (unsigned char *in, int len, unsigned char *out, unsigned char *uubuf, int *state,
guint32 *save, char *uulen);
size_t uudecode_step (unsigned char *in, size_t len, unsigned char *out, int *state, guint32 *save, char *uulen);
int quoted_decode_step(unsigned char *in, int len, unsigned char *out, int *savestate, int *saveme);
size_t uuencode_step (unsigned char *in, size_t len, unsigned char *out, unsigned char *uubuf, int *state,
guint32 *save, char *uulen);
size_t uuencode_close (unsigned char *in, size_t len, unsigned char *out, unsigned char *uubuf, int *state,
guint32 *save, char *uulen);
int quoted_encode_step(unsigned char *in, int len, unsigned char *out, int *state, int *save);
int quoted_encode_close(unsigned char *in, int len, unsigned char *out, int *state, int *save);
size_t quoted_decode_step(unsigned char *in, size_t len, unsigned char *out, int *savestate, int *saveme);
char *base64_encode_simple (const char *data, int len);
int base64_decode_simple (char *data, int len);
size_t quoted_encode_step(unsigned char *in, size_t len, unsigned char *out, int *state, int *save);
size_t quoted_encode_close(unsigned char *in, size_t len, unsigned char *out, int *state, int *save);
char *base64_encode_simple (const char *data, size_t len);
size_t base64_decode_simple (char *data, size_t len);
#endif /* ! _CAMEL_MIME_UTILS_H */

View File

@ -1066,11 +1066,11 @@ pgp_verify (CamelCipherContext *ctx, CamelCipherHash hash, CamelStream *istream,
cd = e_iconv_open ("UTF-8", locale);
if (cd != (iconv_t) -1) {
const char *inbuf;
int ret;
size_t ret;
inbuf = diagnostics;
ret = e_iconv (cd, &inbuf, &inlen, &outbuf, &outlen);
if (ret >= 0) {
if (ret != (size_t) -1) {
e_iconv (cd, NULL, 0, &outbuf, &outlen);
}
e_iconv_close (cd);

View File

@ -709,7 +709,7 @@ digest_response (struct _DigestResponse *resp)
outbuf = username = g_malloc0 (outlen + 1);
buf = resp->username;
if (cd == (iconv_t) -1 || e_iconv (cd, &buf, &len, &outbuf, &outlen) == -1) {
if (cd == (iconv_t) -1 || e_iconv (cd, &buf, &len, &outbuf, &outlen) == (size_t) -1) {
/* We can't convert to UTF-8 - pretend we never got a charset param? */
g_free (resp->charset);
resp->charset = NULL;

View File

@ -306,8 +306,9 @@ do_flush (CamelStream *stream)
struct _CamelStreamFilterPrivate *p = _PRIVATE(filter);
struct _filter *f;
char *buffer;
int len, presize;
int presize;
size_t len;
if (p->last_was_read) {
g_warning("Flushing a filter stream without writing to it");
return 0;