Skip to content

Commit

Permalink
Fix NPE when filtering read entries (apache#10704)
Browse files Browse the repository at this point in the history
### Motivation
When ConcurrentOpenLongPairRangeSet does not contain any data, calling span() will throw NPE

### Modifications
return null instead
  • Loading branch information
315157973 authored and yangl committed Jun 23, 2021
1 parent 1e6db67 commit dbfaad3
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2042,8 +2042,8 @@ List<Entry> filterReadEntries(List<Entry> entries) {
log.debug("[{}] [{}] Filtering entries {} - alreadyDeleted: {}", ledger.getName(), name, entriesRange,
individualDeletedMessages);
}

if (individualDeletedMessages.isEmpty() || !entriesRange.isConnected(individualDeletedMessages.span())) {
if (individualDeletedMessages.isEmpty() || individualDeletedMessages.span() == null ||
!entriesRange.isConnected(individualDeletedMessages.span())) {
// There are no individually deleted messages in this entry list, no need to perform filtering
if (log.isDebugEnabled()) {
log.debug("[{}] [{}] No filtering needed for entries {}", ledger.getName(), name, entriesRange);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,9 @@ public void clear() {

@Override
public Range<T> span() {
if (rangeBitSetMap.size() == 0) {
return null;
}
Entry<Long, BitSet> firstSet = rangeBitSetMap.firstEntry();
Entry<Long, BitSet> lastSet = rangeBitSetMap.lastEntry();
int first = firstSet.getValue().nextSetBit(0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,12 @@ public void testAddCompareCompareWithGuava() {
}
}

@Test
public void testNPE() {
ConcurrentOpenLongPairRangeSet<LongPair> set = new ConcurrentOpenLongPairRangeSet<>(consumer);
assertNull(set.span());
}

@Test
public void testDeleteCompareWithGuava() {

Expand Down

0 comments on commit dbfaad3

Please sign in to comment.