summaryrefslogtreecommitdiff
path: root/external/icu/icu4c-ubsan.patch.1
blob: 9f6aa3fbc9f8fe00cab2da59fbce71cd4dd0ad55 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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;
 
 /**