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;
}

Reply via email to