richedit: Prevent string trunction due to NULL characters.
diff --git a/dlls/riched20/string.c b/dlls/riched20/string.c
index 0bd751c..67b4d9c 100644
--- a/dlls/riched20/string.c
+++ b/dlls/riched20/string.c
@@ -90,35 +90,25 @@
 
 void ME_AppendString(ME_String *s1, const ME_String *s2)
 {
-  if (s1->nLen+s2->nLen+1 <= s1->nBuffer) {
-    lstrcpyW(s1->szData+s1->nLen, s2->szData);
-    s1->nLen += s2->nLen;
-  }
-  else
+  if (s1->nLen+s2->nLen+1 <= s1->nBuffer)
   {
+    memcpy(s1->szData + s1->nLen, s2->szData, s2->nLen * sizeof(WCHAR));
+    s1->nLen += s2->nLen;
+    s1->szData[s1->nLen] = 0;
+  } else {
     WCHAR *buf;
     s1->nBuffer = ME_GetOptimalBuffer(s1->nLen+s2->nLen+1);
 
-    buf = ALLOC_N_OBJ(WCHAR, s1->nBuffer); 
-    lstrcpyW(buf, s1->szData);
-    lstrcpyW(buf+s1->nLen, s2->szData);
+    buf = ALLOC_N_OBJ(WCHAR, s1->nBuffer);
+    memcpy(buf, s1->szData, s1->nLen * sizeof(WCHAR));
+    memcpy(buf + s1->nLen, s2->szData, s2->nLen * sizeof(WCHAR));
     FREE_OBJ(s1->szData);
     s1->szData = buf;
     s1->nLen += s2->nLen;
+    s1->szData[s1->nLen] = 0;
   }
 }
 
-ME_String *ME_ConcatString(const ME_String *s1, const ME_String *s2)
-{
-  ME_String *s = ALLOC_OBJ(ME_String);
-  s->nLen = s1->nLen+s2->nLen;
-  s->nBuffer = ME_GetOptimalBuffer(s1->nLen+s2->nLen+1);
-  s->szData = ALLOC_N_OBJ(WCHAR, s->nBuffer);
-  lstrcpyW(s->szData, s1->szData);
-  lstrcpyW(s->szData+s1->nLen, s2->szData);
-  return s;  
-}
-
 ME_String *ME_VSplitString(ME_String *orig, int charidx)
 {
   ME_String *s;