Author: ek.kato
Date: Mon Jan 28 20:05:54 2008
New Revision: 5143
Modified:
trunk/xim/compose.cpp
trunk/xim/locale.cpp
Log:
* xim/compose.cpp (mb_string_to_utf8) : Make string buffer
calculations more meaningful.
* xim/locale.cpp (UTF8_Locale::utf8_to_native_str) : Ditto.
Modified: trunk/xim/compose.cpp
==============================================================================
--- trunk/xim/compose.cpp (original)
+++ trunk/xim/compose.cpp Mon Jan 28 20:05:54 2008
@@ -1215,7 +1215,7 @@
if (!cd)
return strlcpy(utf8, inbuf, len + 1);
- outbuf = (char *)malloc(outbufsize + 1);
+ outbuf = (char *)malloc(outbufsize);
if (!outbuf) {
uim_iconv->release(cd);
utf8[0] = '\0';
@@ -1224,7 +1224,7 @@
inchar = (char *)inbuf;
outchar = outbuf;
inbytesleft = strlen(inbuf);
- outbytesleft = outbufsize;
+ outbytesleft = outbufsize - 1;
ret_val = iconv(cd, (ICONV_CONST char **)&inchar, &inbytesleft,
&outchar, &outbytesleft);
if (ret_val == (size_t)-1 && errno != E2BIG) {
@@ -1238,10 +1238,10 @@
*outchar = '\0';
- strlcpy(utf8, outbuf, outbufsize - outbytesleft + 1);
+ strlcpy(utf8, outbuf, len + 1);
free(outbuf);
- return outbufsize - outbytesleft;
+ return outbufsize - outbytesleft - 1;
}
/*
Modified: trunk/xim/locale.cpp
==============================================================================
--- trunk/xim/locale.cpp (original)
+++ trunk/xim/locale.cpp Mon Jan 28 20:05:54 2008
@@ -268,14 +268,14 @@
if (!m_iconv_cd)
return strdup(inbuf);
- outbuf = (char *)malloc(outbufsize + 1);
+ outbuf = (char *)malloc(outbufsize);
if (!outbuf)
return NULL;
inchar = inbuf;
outchar = outbuf;
inbytesleft = strlen(inbuf);
- outbytesleft = outbufsize;
+ outbytesleft = outbufsize - 1;
ret_val = iconv(m_iconv_cd, (ICONV_CONST char **)&inchar,
&inbytesleft, &outchar, &outbytesleft);
if (ret_val == (size_t)-1 && errno != E2BIG) {
@@ -284,7 +284,7 @@
return NULL;
}
- convstr = (char *)malloc(outbufsize - outbytesleft + 1);
+ convstr = (char *)malloc(outbufsize - outbytesleft);
if (!convstr) {
free(outbuf);
return NULL;
@@ -292,7 +292,7 @@
*outchar = '\0';
- strlcpy(convstr, outbuf, outbufsize - outbytesleft + 1);
+ strlcpy(convstr, outbuf, outbufsize);
free(outbuf);
return convstr;
}