| Index: patches/bidi.patch | 
| diff --git a/patches/bidi.patch b/patches/bidi.patch | 
| index 5a43e4cee81e22fe15b36a24d7e9c37a271666a6..41764f07b125478976957bf6a9cfa6ac9b75aca0 100644 | 
| --- a/patches/bidi.patch | 
| +++ b/patches/bidi.patch | 
| @@ -1,95 +1,38 @@ | 
| -Index: source/test/cintltst/cbiditst.c | 
| -=================================================================== | 
| ---- source/test/cintltst/cbiditst.c	(revision 36303) | 
| -+++ source/test/cintltst/cbiditst.c	(revision 36304) | 
| -@@ -87,6 +87,8 @@ | 
| - | 
| - static void doTailTest(void); | 
| - | 
| -+static void testBracketOverflow(void); | 
| -+ | 
| - /* new BIDI API */ | 
| - static void testReorderingMode(void); | 
| - static void testReorderRunsOnly(void); | 
| -@@ -133,6 +135,7 @@ | 
| -     addTest(root, testClassOverride, "complex/bidi/TestClassOverride"); | 
| -     addTest(root, testGetBaseDirection, "complex/bidi/testGetBaseDirection"); | 
| -     addTest(root, testContext, "complex/bidi/testContext"); | 
| -+    addTest(root, testBracketOverflow, "complex/bidi/TestBracketOverflow"); | 
| - | 
| -     addTest(root, doArabicShapingTest, "complex/arabic-shaping/ArabicShapingTest"); | 
| -     addTest(root, doLamAlefSpecialVLTRArabicShapingTest, "complex/arabic-shaping/lamalef"); | 
| -@@ -4896,3 +4899,25 @@ | 
| - | 
| -     log_verbose("\nExiting TestContext \n\n"); | 
| - } | 
| -+ | 
| -+/* Ticket#11054 ubidi_setPara crash with heavily nested brackets */ | 
| -+static void | 
| -+testBracketOverflow(void) { | 
| -+    static const char* TEXT = "(((((((((((((((((((((((((((((((((((((((((a)(A)))))))))))))))))))))))))))))))))))))))))"; | 
| -+    UErrorCode status = U_ZERO_ERROR; | 
| -+    UBiDi* bidi; | 
| -+    UChar src[100]; | 
| -+    UChar dest[100]; | 
| -+    int32_t len; | 
| -+ | 
| -+    bidi = ubidi_open(); | 
| -+    len = uprv_strlen(TEXT); | 
| -+    pseudoToU16(len, TEXT, src); | 
| -+    ubidi_setPara(bidi, src, len, UBIDI_DEFAULT_LTR , NULL, &status); | 
| -+    if (U_FAILURE(status)) { | 
| -+        log_err("setPara failed with heavily nested brackets - %s", u_errorName(status)); | 
| -+    } | 
| -+ | 
| -+    ubidi_close(bidi); | 
| -+} | 
| -+ | 
| -Index: source/common/ubidiimp.h | 
| -=================================================================== | 
| ---- source/common/ubidiimp.h	(revision 36303) | 
| -+++ source/common/ubidiimp.h	(revision 36304) | 
| -@@ -173,7 +173,7 @@ | 
| -     /* array of opening entries which should be enough in most cases; no malloc() */ | 
| -     Opening simpleOpenings[SIMPLE_OPENINGS_SIZE]; | 
| -     Opening *openings;                  /* pointer to current array of entries */ | 
| --    int32_t openingsSize;               /* number of allocated entries */ | 
| -+    int32_t openingsCount;              /* number of allocated entries */ | 
| -     int32_t isoRunLast;                 /* index of last used entry */ | 
| -     /* array of nested isolated sequence entries; can never excess UBIDI_MAX_EXPLICIT_LEVEL | 
| -        + 1 for index 0, + 1 for before the first isolated sequence */ | 
| -Index: source/common/ubidi.c | 
| -=================================================================== | 
| ---- source/common/ubidi.c	(revision 36303) | 
| -+++ source/common/ubidi.c	(revision 36304) | 
| -@@ -679,10 +679,10 @@ | 
| -     bd->isoRuns[0].contextPos=0; | 
| -     if(pBiDi->openingsMemory) { | 
| -         bd->openings=pBiDi->openingsMemory; | 
| --        bd->openingsSize=pBiDi->openingsSize; | 
| -+        bd->openingsCount=pBiDi->openingsSize / sizeof(Opening); | 
| -     } else { | 
| -         bd->openings=bd->simpleOpenings; | 
| --        bd->openingsSize=SIMPLE_OPENINGS_SIZE; | 
| -+        bd->openingsCount=SIMPLE_OPENINGS_SIZE; | 
| +diff --git a/source/common/ubidi.c b/source/common/ubidi.c | 
| +index 8c0d64b..e773de7 100644 | 
| +--- a/source/common/ubidi.c | 
| ++++ b/source/common/ubidi.c | 
| +@@ -1,7 +1,7 @@ | 
| + /* | 
| + ****************************************************************************** | 
| + * | 
| +-*   Copyright (C) 1999-2014, International Business Machines | 
| ++*   Copyright (C) 1999-2015, International Business Machines | 
| + *   Corporation and others.  All Rights Reserved. | 
| + * | 
| + ****************************************************************************** | 
| +@@ -2340,7 +2340,7 @@ setParaSuccess(UBiDi *pBiDi) { | 
| + static void | 
| + setParaRunsOnly(UBiDi *pBiDi, const UChar *text, int32_t length, | 
| +                 UBiDiLevel paraLevel, UErrorCode *pErrorCode) { | 
| +-    void *runsOnlyMemory; | 
| ++    void *runsOnlyMemory = NULL; | 
| +     int32_t *visualMap; | 
| +     UChar *visualText; | 
| +     int32_t saveLength, saveTrailingWSStart; | 
| +@@ -2514,12 +2514,13 @@ setParaRunsOnly(UBiDi *pBiDi, const UChar *text, int32_t length, | 
| } | 
| -     bd->isNumbersSpecial=bd->pBiDi->reorderingMode==UBIDI_REORDER_NUMBERS_SPECIAL || | 
| -                          bd->pBiDi->reorderingMode==UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL; | 
| -@@ -743,7 +743,7 @@ | 
| - bracketAddOpening(BracketData *bd, UChar match, int32_t position) { | 
| -     IsoRun *pLastIsoRun=&bd->isoRuns[bd->isoRunLast]; | 
| -     Opening *pOpening; | 
| --    if(pLastIsoRun->limit>=bd->openingsSize) {  /* no available new entry */ | 
| -+    if(pLastIsoRun->limit>=bd->openingsCount) {  /* no available new entry */ | 
| -         UBiDi *pBiDi=bd->pBiDi; | 
| -         if(!getInitialOpeningsMemory(pBiDi, pLastIsoRun->limit * 2)) | 
| -             return FALSE; | 
| -@@ -751,7 +751,7 @@ | 
| -             uprv_memcpy(pBiDi->openingsMemory, bd->simpleOpenings, | 
| -                         SIMPLE_OPENINGS_SIZE * sizeof(Opening)); | 
| -         bd->openings=pBiDi->openingsMemory;     /* may have changed */ | 
| --        bd->openingsSize=pBiDi->openingsSize; | 
| -+        bd->openingsCount=pBiDi->openingsSize / sizeof(Opening); | 
| +     uprv_memcpy(pBiDi->levels, saveLevels, saveLength*sizeof(UBiDiLevel)); | 
| +     pBiDi->trailingWSStart=saveTrailingWSStart; | 
| +-    /* free memory for mapping table and visual text */ | 
| +-    uprv_free(runsOnlyMemory); | 
| +     if(pBiDi->runCount>1) { | 
| +         pBiDi->direction=UBIDI_MIXED; | 
| } | 
| -     pOpening=&bd->openings[pLastIsoRun->limit]; | 
| -     pOpening->position=position; | 
| +   cleanup3: | 
| ++    /* free memory for mapping table and visual text */ | 
| ++    uprv_free(runsOnlyMemory); | 
| ++ | 
| +     pBiDi->reorderingMode=UBIDI_REORDER_RUNS_ONLY; | 
| + } | 
| + | 
|  |