usp10/tests: Reserve for InClass a byte for every character in teststr. (v4)

Bernhard Übelacker bernhardu at mailbox.org
Fri Aug 5 15:43:31 CDT 2016


https://bugs.winehq.org/show_bug.cgi?id=40385

ScriptStringAnalyse expects InClass pointing to an array with one
byte for every character getting in teststr.

v1:
https://www.winehq.org/pipermail/wine-patches/2016-August/153001.html
https://www.winehq.org/pipermail/wine-devel/2016-August/114173.html

Changes since v1:
- Avoid compiler warning by using static with explicit array length.
- Show trace just when we expect a crash.
- Check hr if we did not crash.

v2:
https://www.winehq.org/pipermail/wine-patches/2016-August/153075.html
https://www.winehq.org/pipermail/wine-devel/2016-August/114184.html

Changes since v2:
- Remove the ugly test with PAGE_NOACCESS and leave just the fix.

v3:
https://www.winehq.org/pipermail/wine-patches/2016-August/153134.html
https://www.winehq.org/pipermail/wine-devel/2016-August/114200.html

Changes since v3:
- Replace explicit array size to sizeof() kind.
- Dx array needs also the size of the length of the string.

Thanks to all reviewers.

Signed-off-by: Bernhard Übelacker <bernhardu at mailbox.org>
---
 dlls/usp10/tests/usp10.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/dlls/usp10/tests/usp10.c b/dlls/usp10/tests/usp10.c
index 6b2152f..aed0620 100644
--- a/dlls/usp10/tests/usp10.c
+++ b/dlls/usp10/tests/usp10.c
@@ -2899,8 +2899,8 @@ static void test_ScriptString(HDC hdc)
     int             Charset;
     DWORD           Flags = SSA_GLYPHS;
     int             ReqWidth = 100;
-    const int       Dx[5] = {10, 10, 10, 10, 10};
-    const BYTE      InClass = 0;
+    static const int Dx[(sizeof(teststr) / sizeof(WCHAR)) - 1];
+    static const BYTE InClass[(sizeof(teststr) / sizeof(WCHAR)) - 1];
     SCRIPT_STRING_ANALYSIS ssa = NULL;
 
     int             X = 10; 
@@ -2919,26 +2919,26 @@ static void test_ScriptString(HDC hdc)
     /* Test without hdc to get E_PENDING */
     hr = ScriptStringAnalyse( NULL, teststr, len, Glyphs, Charset, Flags,
                               ReqWidth, NULL, NULL, Dx, NULL,
-                              &InClass, &ssa);
+                              InClass, &ssa);
     ok(hr == E_PENDING, "ScriptStringAnalyse Stub should return E_PENDING not %08x\n", hr);
 
     /* Test that 0 length string returns E_INVALIDARG  */
     hr = ScriptStringAnalyse( hdc, teststr, 0, Glyphs, Charset, Flags,
                               ReqWidth, NULL, NULL, Dx, NULL,
-                              &InClass, &ssa);
+                              InClass, &ssa);
     ok(hr == E_INVALIDARG, "ScriptStringAnalyse should return E_INVALIDARG not %08x\n", hr);
 
     /* test with hdc, this should be a valid test  */
     hr = ScriptStringAnalyse( hdc, teststr, len, Glyphs, Charset, Flags,
                               ReqWidth, NULL, NULL, Dx, NULL,
-                              &InClass, &ssa);
+                              InClass, &ssa);
     ok(hr == S_OK, "ScriptStringAnalyse should return S_OK not %08x\n", hr);
     ScriptStringFree(&ssa);
 
     /* test makes sure that a call with a valid pssa still works */
     hr = ScriptStringAnalyse( hdc, teststr, len, Glyphs, Charset, Flags,
                               ReqWidth, NULL, NULL, Dx, NULL,
-                              &InClass, &ssa);
+                              InClass, &ssa);
     ok(hr == S_OK, "ScriptStringAnalyse should return S_OK not %08x\n", hr);
     ok(ssa != NULL, "ScriptStringAnalyse pssa should not be NULL\n");
 
@@ -2982,7 +2982,7 @@ static void test_ScriptStringXtoCP_CPtoX(HDC hdc)
     int             Charset = -1;                       /* unicode                        */
     DWORD           Flags = SSA_GLYPHS;
     int             ReqWidth = 100;
-    const BYTE      InClass = 0;
+    static const BYTE InClass[(sizeof(teststr1)/sizeof(WCHAR))-1];
     SCRIPT_STRING_ANALYSIS ssa = NULL;
 
     int             Ch;                                  /* Character position in string */
@@ -2999,7 +2999,7 @@ static void test_ScriptStringXtoCP_CPtoX(HDC hdc)
 
     hr = ScriptStringAnalyse( hdc, String, String_len, Glyphs, Charset, Flags,
                               ReqWidth, NULL, NULL, NULL, NULL,
-                              &InClass, &ssa);
+                              InClass, &ssa);
     ok(hr == S_OK ||
        hr == E_INVALIDARG, /* NT */
        "ScriptStringAnalyse should return S_OK or E_INVALIDARG not %08x\n", hr);
@@ -3139,7 +3139,7 @@ static void test_ScriptStringXtoCP_CPtoX(HDC hdc)
          */
         hr = ScriptStringAnalyse( hdc, String, String_len, Glyphs, Charset, Flags,
                                   ReqWidth, NULL, NULL, NULL, NULL,
-                                  &InClass, &ssa);
+                                  InClass, &ssa);
         ok(hr == S_OK, "ScriptStringAnalyse should return S_OK not %08x\n", hr);
 
         /*
-- 
2.1.4




More information about the wine-patches mailing list