Skip to content

Commit e666a8d

Browse files
authored
Merge pull request #1290 from angelos3lex/guard_to_prevent_1142_and_1144_issues_2
Guard to avoid Service.getDeviceID()' on a null object reference (#1142) and cleanServicesAndCharacteristicsForDevice outOfBounds (#1144) crashes
2 parents ad219c7 + 2551cfc commit e666a8d

File tree

1 file changed

+25
-8
lines changed

1 file changed

+25
-8
lines changed

android/src/main/java/com/bleplx/adapter/BleModule.java

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1562,27 +1562,44 @@ private Characteristic getCharacteristicOrEmitError(final int characteristicIden
15621562
}
15631563

15641564
private void cleanServicesAndCharacteristicsForDevice(@NonNull Device device) {
1565-
for (int i = discoveredServices.size() - 1; i >= 0; i--) {
1565+
List<Integer> discoveredServicesKeysToRemove = new ArrayList<>();
1566+
for (int i = 0; i < discoveredServices.size(); i++) {
15661567
int key = discoveredServices.keyAt(i);
15671568
Service service = discoveredServices.get(key);
1568-
1569-
if (service.getDeviceID().equals(device.getId())) {
1569+
if (service == null || service.getDeviceID().equals(device.getId())) {
1570+
discoveredServicesKeysToRemove.add(key);
1571+
}
1572+
}
1573+
for (int key : discoveredServicesKeysToRemove) {
1574+
if (discoveredServices.indexOfKey(key) >= 0) {
15701575
discoveredServices.remove(key);
15711576
}
15721577
}
1573-
for (int i = discoveredCharacteristics.size() - 1; i >= 0; i--) {
1578+
1579+
List<Integer> discoveredCharacteristicsKeysToRemove = new ArrayList<>();
1580+
for (int i = 0; i < discoveredCharacteristics.size(); i++) {
15741581
int key = discoveredCharacteristics.keyAt(i);
15751582
Characteristic characteristic = discoveredCharacteristics.get(key);
1576-
1577-
if (characteristic.getDeviceId().equals(device.getId())) {
1583+
if (characteristic == null || characteristic.getDeviceId().equals(device.getId())) {
1584+
discoveredCharacteristicsKeysToRemove.add(key);
1585+
}
1586+
}
1587+
for (int key : discoveredCharacteristicsKeysToRemove) {
1588+
if (discoveredCharacteristics.indexOfKey(key) >= 0) {
15781589
discoveredCharacteristics.remove(key);
15791590
}
15801591
}
15811592

1582-
for (int i = discoveredDescriptors.size() - 1; i >= 0; i--) {
1593+
List<Integer> discoveredDescriptorsKeysToRemove = new ArrayList<>();
1594+
for (int i = 0; i < discoveredDescriptors.size(); i++) {
15831595
int key = discoveredDescriptors.keyAt(i);
15841596
Descriptor descriptor = discoveredDescriptors.get(key);
1585-
if (descriptor.getDeviceId().equals(device.getId())) {
1597+
if (descriptor == null || descriptor.getDeviceId().equals(device.getId())) {
1598+
discoveredDescriptorsKeysToRemove.add(key);
1599+
}
1600+
}
1601+
for (int key : discoveredDescriptorsKeysToRemove) {
1602+
if (discoveredDescriptors.indexOfKey(key) >= 0) {
15861603
discoveredDescriptors.remove(key);
15871604
}
15881605
}

0 commit comments

Comments
 (0)