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;