projects
/
infodrom
/
newmail
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
2212ce2
)
Terminate the output string if it hasn't been fully converted
author
Joey Schulze
<joey@infodrom.org>
Wed, 8 Feb 2006 18:01:11 +0000
(18:01 +0000)
committer
Joey Schulze
<joey@infodrom.org>
Wed, 8 Feb 2006 18:01:11 +0000
(18:01 +0000)
charset.c
patch
|
blob
|
history
diff --git
a/charset.c
b/charset.c
index
b2278cb
..
1585683
100644
(file)
--- a/
charset.c
+++ b/
charset.c
@@
-44,6
+44,7
@@
char *convert_word(const char *encoding, char *inbuf, char *outbuf, size_t outby
char *inptr, *outptr;
size_t inbytesleft;
size_t nconv;
char *inptr, *outptr;
size_t inbytesleft;
size_t nconv;
+ size_t outsize;
if (!charset || !strcasecmp (encoding, charset)) {
memmove (outbuf, inbuf, strlen(inbuf)<outbytesleft?strlen(inbuf)+1:strlen(inbuf));
if (!charset || !strcasecmp (encoding, charset)) {
memmove (outbuf, inbuf, strlen(inbuf)<outbytesleft?strlen(inbuf)+1:strlen(inbuf));
@@
-51,6
+52,8
@@
char *convert_word(const char *encoding, char *inbuf, char *outbuf, size_t outby
return outbuf;
}
return outbuf;
}
+ outsize = outbytesleft;
+
cd = iconv_open (charset, encoding);
inbytesleft = strlen (inbuf)+1;
cd = iconv_open (charset, encoding);
inbytesleft = strlen (inbuf)+1;
@@
-60,6
+63,9
@@
char *convert_word(const char *encoding, char *inbuf, char *outbuf, size_t outby
nconv = iconv (cd, &inptr, &inbytesleft, &outptr, &outbytesleft);
iconv_close(cd);
nconv = iconv (cd, &inptr, &inbytesleft, &outptr, &outbytesleft);
iconv_close(cd);
+ if (nconv == -1 && outsize-outbytesleft >= 0)
+ outbuf[outsize-outbytesleft] = '\0';
+
return outbuf;
}
return outbuf;
}