Here is my patch to fix the corrupt UT_UCSString.

Andrew Dunbar.

-- 
http://linguaphile.sourceforge.net
Index: src/af/util/xp/ut_stringbuf.cpp
===================================================================
RCS file: /cvsroot/abi/src/af/util/xp/ut_stringbuf.cpp,v
retrieving revision 1.8
diff -u -r1.8 ut_stringbuf.cpp
--- src/af/util/xp/ut_stringbuf.cpp     2001/05/25 05:52:09     1.8
+++ src/af/util/xp/ut_stringbuf.cpp     2001/06/02 07:35:50
@@ -46,7 +46,7 @@
        m_pEnd(m_psz + rhs.size()),
        m_size(rhs.capacity())
 {
-       memcpy(m_psz, rhs.m_psz, rhs.capacity());
+       memcpy(m_psz, rhs.m_psz, rhs.capacity() * sizeof(char_type));
 }
 
 UT_Stringbuf::UT_Stringbuf(const char_type* sz, size_t n)
@@ -78,7 +78,7 @@
                if (n >= capacity()) {
                        grow_nocopy(n);
                }
-               memcpy(m_psz, sz, n);
+               memcpy(m_psz, sz, n * sizeof(char_type));
                m_psz[n] = 0;
                m_pEnd = m_psz + n;
        } else {
@@ -97,7 +97,7 @@
        }
        const size_t nLen = size();
        grow_copy(nLen + n);
-       memcpy(m_psz + nLen, sz, n);
+       memcpy(m_psz + nLen, sz, n * sizeof(char_type));
        m_psz[nLen + n] = 0;
        m_pEnd += n;
 }
@@ -156,7 +156,7 @@
                char_type* p = new char_type[n];
                const size_t nCurSize = size();
                if (m_psz) {
-                       memcpy(p, m_psz, size() + 1);
+                       memcpy(p, m_psz, (size() + 1) * sizeof(char_type));
                        delete[] m_psz;
                }
                m_psz  = p;
@@ -188,7 +188,7 @@
                n = priv_max(n, (size_t)(nCurSize * g_rGrowBy));
                char_type* p = new char_type[n];
                if (m_psz) {
-                       memcpy(p, m_psz, size() + 1);
+                       memcpy(p, m_psz, (size() + 1) * sizeof(char_type));
                        delete[] m_psz;
                }
                m_psz  = p;
@@ -213,7 +213,7 @@
        m_pEnd(m_psz + rhs.size()),
        m_size(rhs.capacity())
 {
-       memcpy(m_psz, rhs.m_psz, rhs.capacity());
+       memcpy(m_psz, rhs.m_psz, rhs.capacity() * sizeof(char_type));
 }
 
 UT_UCS2Stringbuf::UT_UCS2Stringbuf(const char_type* sz, size_t n)
@@ -221,7 +221,7 @@
        m_pEnd(m_psz + n),
        m_size(n+1)
 {
-       memcpy(m_psz, sz, n);
+       memcpy(m_psz, sz, n * sizeof(char_type));
        m_psz[n] = 0;
 }
 
@@ -245,7 +245,7 @@
                if (n >= capacity()) {
                        grow_nocopy(n);
                }
-               memcpy(m_psz, sz, n);
+               memcpy(m_psz, sz, n * sizeof(char_type));
                m_psz[n] = 0;
                m_pEnd = m_psz + n;
        } else {
@@ -264,7 +264,7 @@
        }
        const size_t nLen = size();
        grow_copy(nLen + n);
-       memcpy(m_psz + nLen, sz, n);
+       memcpy(m_psz + nLen, sz, n * sizeof(char_type));
        m_psz[nLen + n] = 0;
        m_pEnd += n;
 }
@@ -319,7 +319,7 @@
                char_type* p = new char_type[n];
                const size_t nCurSize = size();
                if (m_psz) {
-                       memcpy(p, m_psz, size() + 1);
+                       memcpy(p, m_psz, (size() + 1) * sizeof(char_type));
                        delete[] m_psz;
                }
                m_psz  = p;
@@ -351,7 +351,7 @@
                n = priv_max(n, (size_t)(nCurSize * g_rGrowBy));
                char_type* p = new char_type[n];
                if (m_psz) {
-                       memcpy(p, m_psz, size() + 1);
+                       memcpy(p, m_psz, (size() + 1) * sizeof(char_type));
                        delete[] m_psz;
                }
                m_psz  = p;

Reply via email to