Dylan Smith : richedit: Prevent string trunction due to NULL characters.
Alexandre Julliard
julliard at winehq.org
Mon Feb 9 10:29:28 CST 2009
Module: wine
Branch: master
Commit: f53f40bcb36f012355ed8e325cbafd68aff6a5ec
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f53f40bcb36f012355ed8e325cbafd68aff6a5ec
Author: Dylan Smith <dylan.ah.smith at gmail.com>
Date: Sat Feb 7 13:20:46 2009 -0500
richedit: Prevent string trunction due to NULL characters.
---
dlls/riched20/editor.h | 1 -
dlls/riched20/string.c | 28 +++++++++-------------------
2 files changed, 9 insertions(+), 20 deletions(-)
diff --git a/dlls/riched20/editor.h b/dlls/riched20/editor.h
index 1312363..e06a86d 100644
--- a/dlls/riched20/editor.h
+++ b/dlls/riched20/editor.h
@@ -95,7 +95,6 @@ ME_String *ME_MakeStringB(int nMaxChars);
ME_String *ME_StrDup(const ME_String *s);
void ME_DestroyString(ME_String *s);
void ME_AppendString(ME_String *s1, const ME_String *s2);
-ME_String *ME_ConcatString(const ME_String *s1, const ME_String *s2);
ME_String *ME_VSplitString(ME_String *orig, int nVPos);
int ME_IsWhitespaces(const ME_String *s);
int ME_IsSplitable(const ME_String *s);
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_DestroyString(ME_String *s)
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;
More information about the wine-cvs
mailing list