Henri Verbeet : usp10: Use usp10_array_reserve() in computeBracketPairs().

Alexandre Julliard julliard at winehq.org
Tue Feb 20 16:44:53 CST 2018


Module: wine
Branch: master
Commit: d48dd7efbf5e7e78e5b42c893341256b5054b4ec
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=d48dd7efbf5e7e78e5b42c893341256b5054b4ec

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Tue Feb 20 10:22:00 2018 +0330

usp10: Use usp10_array_reserve() in computeBracketPairs().

Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Aric Stewart <aric at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/usp10/bidi.c | 71 +++++++++++++++++++++++++++----------------------------
 1 file changed, 35 insertions(+), 36 deletions(-)

diff --git a/dlls/usp10/bidi.c b/dlls/usp10/bidi.c
index 2277190..b0df781 100644
--- a/dlls/usp10/bidi.c
+++ b/dlls/usp10/bidi.c
@@ -694,6 +694,7 @@ static BracketPair *computeBracketPairs(IsolatedRun *iso_run)
     int stack_top = iso_run->length;
     unsigned int pair_count = 0;
     BracketPair *out = NULL;
+    SIZE_T out_size = 0;
     int i;
 
     open_stack = heap_alloc(iso_run->length * sizeof(*open_stack));
@@ -702,42 +703,43 @@ static BracketPair *computeBracketPairs(IsolatedRun *iso_run)
     for (i = 0; i < iso_run->length; i++)
     {
         unsigned short ubv = get_table_entry(bidi_bracket_table, iso_run->item[i].ch);
-        if (ubv)
+
+        if (!ubv)
+            continue;
+
+        if ((ubv >> 8) == 0)
         {
-            if (!out)
-            {
-                out = heap_alloc(sizeof(*out));
-                out[0].start = -1;
-            }
+            --stack_top;
+            open_stack[stack_top] = iso_run->item[i].ch + (signed char)(ubv & 0xff);
+            /* Deal with canonical equivalent U+2329/232A and U+3008/3009. */
+            if (open_stack[stack_top] == 0x232a)
+                open_stack[stack_top] = 0x3009;
+            stack_index[stack_top] = i;
+        }
+        else if ((ubv >> 8) == 1)
+        {
+            unsigned int j;
 
-            if ((ubv >> 8) == 0)
-            {
-                stack_top --;
-                open_stack[stack_top] = iso_run->item[i].ch + (signed char)(ubv & 0xff);
-                /* deal with canonical equivalent U+2329/232A and U+3008/3009 */
-                if (open_stack[stack_top] == 0x232A)
-                    open_stack[stack_top] = 0x3009;
-                stack_index[stack_top] = i;
-            }
-            else if ((ubv >> 8) == 1)
+            for (j = stack_top; j < iso_run->length; ++j)
             {
-                int j;
-                if (stack_top == iso_run->length) continue;
-                for (j = stack_top; j < iso_run->length; j++)
-                {
-                    WCHAR c = iso_run->item[i].ch;
-                    if (c == 0x232A) c = 0x3009;
-                    if (c == open_stack[j])
-                    {
-                        out[pair_count].start = stack_index[j];
-                        out[pair_count].end = i;
-                        pair_count++;
-                        out = HeapReAlloc(GetProcessHeap(), 0, out, sizeof(BracketPair) * (pair_count+1));
-                        out[pair_count].start = -1;
-                        stack_top = j+1;
-                        break;
-                    }
-                }
+                WCHAR c = iso_run->item[i].ch;
+
+                if (c == 0x232a)
+                    c = 0x3009;
+
+                if (c != open_stack[j])
+                    continue;
+
+                if (!(usp10_array_reserve((void **)&out, &out_size, pair_count + 2, sizeof(*out))))
+                    ERR("Failed to grow output array.\n");
+
+                out[pair_count].start = stack_index[j];
+                out[pair_count].end = i;
+                ++pair_count;
+
+                out[pair_count].start = -1;
+                stack_top = j + 1;
+                break;
             }
         }
     }
@@ -746,10 +748,7 @@ static BracketPair *computeBracketPairs(IsolatedRun *iso_run)
     heap_free(stack_index);
 
     if (!pair_count)
-    {
-        heap_free(out);
         return NULL;
-    }
 
     qsort(out, pair_count, sizeof(*out), compr);
 




More information about the wine-cvs mailing list