Commit 84f4d2a
committed
fix: Ranges() infinite loop on bitmap containers and hs|offset overflow
Two bugs in Ranges():
1. bitmapContainer: after emitting a short run within a 64-bit word,
pos was recalculated via integer division back to the same word,
causing an infinite loop. Fix: process all runs within a word using
an inner loop that clears processed bits.
2. bitmapContainer + arrayContainer used hs|offset instead of hs+offset
to combine the container key with local offsets. This silently
produced wrong endExclusive values for the last container (key
0xFFFF) where the exclusive end (65536) overflows into the key bits.
The runContainer16 path already used + correctly.1 parent 0a441f7 commit 84f4d2a
2 files changed
+680
-54
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
92 | 92 | | |
93 | 93 | | |
94 | 94 | | |
95 | | - | |
| 95 | + | |
| 96 | + | |
96 | 97 | | |
97 | 98 | | |
98 | 99 | | |
99 | 100 | | |
100 | | - | |
101 | | - | |
102 | | - | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
103 | 104 | | |
104 | | - | |
105 | | - | |
106 | | - | |
107 | | - | |
108 | | - | |
109 | | - | |
110 | | - | |
111 | | - | |
112 | | - | |
113 | | - | |
114 | | - | |
115 | | - | |
116 | | - | |
117 | | - | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
118 | 111 | | |
119 | | - | |
120 | | - | |
121 | | - | |
122 | | - | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
123 | 129 | | |
124 | 130 | | |
| 131 | + | |
125 | 132 | | |
126 | 133 | | |
127 | 134 | | |
| |||
135 | 142 | | |
136 | 143 | | |
137 | 144 | | |
138 | | - | |
| 145 | + | |
139 | 146 | | |
140 | 147 | | |
141 | 148 | | |
| |||
0 commit comments