| diff -ur icu.org/source/common/rbbidata.h icu/source/common/rbbidata.h |
| --- icu.org/source/common/rbbidata.h 2017-02-03 19:57:23.000000000 +0100 |
| +++ icu/source/common/rbbidata.h 2017-04-21 22:46:25.371651160 +0200 |
| @@ -115,7 +115,7 @@ |
| /* StatusTable of the set of matching */ |
| /* tags (rule status values) */ |
| int16_t fReserved; |
| - uint16_t fNextState[2]; /* Next State, indexed by char category. */ |
| + uint16_t fNextState[1]; /* Next State, indexed by char category. */ |
| /* This array does not have two elements */ |
| /* Array Size is actually fData->fHeader->fCatCount */ |
| /* CAUTION: see RBBITableBuilder::getTableSize() */ |
| @@ -128,7 +128,7 @@ |
| uint32_t fRowLen; /* Length of a state table row, in bytes. */ |
| uint32_t fFlags; /* Option Flags for this state table */ |
| uint32_t fReserved; /* reserved */ |
| - char fTableData[4]; /* First RBBIStateTableRow begins here. */ |
| + char fTableData[1]; /* First RBBIStateTableRow begins here. */ |
| /* (making it char[] simplifies ugly address */ |
| /* arithmetic for indexing variable length rows.) */ |
| }; |
| diff -ur icu.org/source/common/rbbitblb.cpp icu/source/common/rbbitblb.cpp |
| --- icu.org/source/common/rbbitblb.cpp 2017-01-20 01:20:31.000000000 +0100 |
| +++ icu/source/common/rbbitblb.cpp 2017-04-21 22:46:25.373651159 +0200 |
| @@ -1095,15 +1095,15 @@ |
| return 0; |
| } |
| |
| - size = sizeof(RBBIStateTable) - 4; // The header, with no rows to the table. |
| + size = offsetof(RBBIStateTable, fTableData); // The header, with no rows to the table. |
| |
| numRows = fDStates->size(); |
| numCols = fRB->fSetBuilder->getNumCharCategories(); |
| |
| - // Note The declaration of RBBIStateTableRow is for a table of two columns. |
| - // Therefore we subtract two from numCols when determining |
| + // Note The declaration of RBBIStateTableRow is for a table of one columns. |
| + // Therefore we subtract one from numCols when determining |
| // how much storage to add to a row for the total columns. |
| - rowSize = sizeof(RBBIStateTableRow) + sizeof(uint16_t)*(numCols-2); |
| + rowSize = sizeof(RBBIStateTableRow) + sizeof(uint16_t)*(numCols-1); |
| size += numRows * rowSize; |
| return size; |
| } |
| @@ -1133,7 +1133,7 @@ |
| } |
| |
| table->fRowLen = sizeof(RBBIStateTableRow) + |
| - sizeof(uint16_t) * (fRB->fSetBuilder->getNumCharCategories() - 2); |
| + sizeof(uint16_t) * (fRB->fSetBuilder->getNumCharCategories() - 1); |
| table->fNumStates = fDStates->size(); |
| table->fFlags = 0; |
| if (fRB->fLookAheadHardBreak) { |
| diff -ur icu.org/source/common/ubidiimp.h icu/source/common/ubidiimp.h |
| --- icu.org/source/common/ubidiimp.h 2017-02-03 19:57:23.000000000 +0100 |
| +++ icu/source/common/ubidiimp.h 2017-04-21 22:46:25.374651159 +0200 |
| @@ -198,8 +198,8 @@ |
| /* in a Run, logicalStart will get this bit set if the run level is odd */ |
| #define INDEX_ODD_BIT (1UL<<31) |
| |
| -#define MAKE_INDEX_ODD_PAIR(index, level) ((index)|((int32_t)(level)<<31)) |
| -#define ADD_ODD_BIT_FROM_LEVEL(x, level) ((x)|=((int32_t)(level)<<31)) |
| +#define MAKE_INDEX_ODD_PAIR(index, level) ((index)|((uint32_t)(level)<<31)) |
| +#define ADD_ODD_BIT_FROM_LEVEL(x, level) ((x)|=((uint32_t)(level)<<31)) |
| #define REMOVE_ODD_BIT(x) ((x)&=~INDEX_ODD_BIT) |
| |
| #define GET_INDEX(x) ((x)&~INDEX_ODD_BIT) |
| diff -ur icu.org/source/common/ucmndata.cpp icu/source/common/ucmndata.cpp |
| --- icu.org/source/common/ucmndata.cpp 2017-03-08 16:34:47.000000000 +0100 |
| +++ icu/source/common/ucmndata.cpp 2017-04-21 22:46:25.376651159 +0200 |
| @@ -77,7 +77,7 @@ |
| typedef struct { |
| uint32_t count; |
| uint32_t reserved; |
| - PointerTOCEntry entry[2]; /* Actual size is from count. */ |
| + PointerTOCEntry entry[1]; /* Actual size is from count. */ |
| } PointerTOC; |
| |
| |
| diff -ur icu.org/source/common/ucmndata.h icu/source/common/ucmndata.h |
| --- icu.org/source/common/ucmndata.h 2017-01-20 01:20:31.000000000 +0100 |
| +++ icu/source/common/ucmndata.h 2017-04-21 22:46:25.377651159 +0200 |
| @@ -52,7 +52,7 @@ |
| |
| typedef struct { |
| uint32_t count; |
| - UDataOffsetTOCEntry entry[2]; /* Actual size of array is from count. */ |
| + UDataOffsetTOCEntry entry[1]; /* Actual size of array is from count. */ |
| } UDataOffsetTOC; |
| |
| /** |