On 03.08.2016 0:33, Bernhard Übelacker wrote:
https://bugs.winehq.org/show_bug.cgi?id=40385
ScriptStringAnalyse crashes if InClass is just one byte in size followed by memory marked as PAGE_NOACCESS. By testing the size it seems it should have the same size as characters in teststr are given to the function. --- dlls/usp10/tests/usp10.c | 103 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 95 insertions(+), 8 deletions(-)
diff --git a/dlls/usp10/tests/usp10.c b/dlls/usp10/tests/usp10.c index 6b2152f..7eb0592 100644 --- a/dlls/usp10/tests/usp10.c +++ b/dlls/usp10/tests/usp10.c @@ -2900,7 +2900,7 @@ static void test_ScriptString(HDC hdc) DWORD Flags = SSA_GLYPHS; int ReqWidth = 100; const int Dx[5] = {10, 10, 10, 10, 10}; - const BYTE InClass = 0; + const BYTE InClass[len]; SCRIPT_STRING_ANALYSIS ssa = NULL;
int X = 10; @@ -2916,29 +2916,30 @@ static void test_ScriptString(HDC hdc)
Charset = -1; /* this flag indicates unicode input */ + memset((void*)InClass, 0, sizeof(InClass));
Instead of using len, it should be either use a constant, or be allocated dynamically, otherwise you'll get compiler warning with default flags we're building with. I think it would be easier to make it 'static const BYTE InClass[32];' (or whatever length is appropriate). Otherwise it looks reasonable, thanks for working on this.