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:
committed by
Jeffrey Stedfast
parent
bc9bb5281b
commit
081f6dbb1b
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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 */
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
Reference in New Issue
Block a user