Commit cd239d3
committed
Use same key match for containsKey
The containsKey method was never modified to support identity mode
and will inccorrectly return true for distinct object keys that are
equals and have the same identity hashcode. This led to bugs in
Marshal.dump when many of the same value occurred in an object
graph. containsKey would report that such an object was already in
the link map, but a subsequent get of that key would produce -1 to
be written to the dump. Later loading of that dump would error due
to the invalid link index.
The fix here modifies containsKey to use the same matching logic
as get, with awareness of identity comparison.
A test is included that will usually exercise the given logic, if
it can produce a duplicate key object within a 5s timeout. If it
cannot do that, it will no-op and skip the test. On my MacBook Air
M4 with 10ish cores, it finds such a duplicate about 90% of the
time.
Fixes jruby#91521 parent c6e6679 commit cd239d3
2 files changed
Lines changed: 57 additions & 6 deletions
File tree
- core/src
- main/java/org/jruby/util/collections
- test/java/org/jruby/util/collections
Lines changed: 3 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
95 | 95 | | |
96 | 96 | | |
97 | 97 | | |
98 | | - | |
| 98 | + | |
99 | 99 | | |
100 | 100 | | |
101 | 101 | | |
102 | 102 | | |
103 | | - | |
| 103 | + | |
104 | 104 | | |
105 | 105 | | |
106 | 106 | | |
| |||
307 | 307 | | |
308 | 308 | | |
309 | 309 | | |
310 | | - | |
311 | | - | |
312 | | - | |
313 | | - | |
| 310 | + | |
314 | 311 | | |
315 | 312 | | |
316 | 313 | | |
| |||
Lines changed: 54 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 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 | + | |
0 commit comments