Fix NPE in BMP 39/90239/2
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 4 Jun 2020 03:07:37 +0000 (05:07 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 4 Jun 2020 03:11:31 +0000 (05:11 +0200)
Empty lists are being squashed to nulls now, make sure we account
for this this possiblity. Fixes the following splat:

java.lang.NullPointerException: null
at org.opendaylight.protocol.bmp.impl.app.BmpRouterPeerImpl.setPeerTables(BmpRouterPeerImpl.java:262) ~[bundleFile:?]
at org.opendaylight.protocol.bmp.impl.app.BmpRouterPeerImpl.<init>(BmpRouterPeerImpl.java:145) ~[bundleFile:?]
at org.opendaylight.protocol.bmp.impl.app.BmpRouterPeerImpl.createRouterPeer(BmpRouterPeerImpl.java:168) ~[bundleFile:?]
at org.opendaylight.protocol.bmp.impl.app.BmpRouterImpl.onPeerUp(BmpRouterImpl.java:249) ~[bundleFile:?]
at org.opendaylight.protocol.bmp.impl.app.BmpRouterImpl.onMessage(BmpRouterImpl.java:122) ~[bundleFile:?]
at org.opendaylight.protocol.bmp.impl.session.BmpSessionImpl.handleMessage(BmpSessionImpl.java:127) ~[bundleFile:?]
at org.opendaylight.protocol.bmp.impl.session.BmpSessionImpl.channelRead0(BmpSessionImpl.java:50) ~[bundleFile:?]
at org.opendaylight.protocol.bmp.impl.session.BmpSessionImpl.channelRead0(BmpSessionImpl.java:33) ~[bundleFile:?]

Change-Id: I303095aa30f296f0bb77d4d11b6a31ee77494abb
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
bmp/bmp-impl/src/main/java/org/opendaylight/protocol/bmp/impl/app/BmpRouterPeerImpl.java

index dd81fb645d03ed082e2ea8870faee7982dc8cc29..20a0c0fe87b71a207d457566ce156d16817a0b6d 100644 (file)
@@ -259,17 +259,18 @@ public final class BmpRouterPeerImpl implements BmpRouterPeer {
 
     private static Set<TablesKey> setPeerTables(final ReceivedOpen open) {
         final Set<TablesKey> tables = Sets.newHashSet(DEFAULT_TABLE);
-        for (final BgpParameters param : open.getBgpParameters()) {
-            for (final OptionalCapabilities optCapa : param.getOptionalCapabilities()) {
+        for (final BgpParameters param : open.nonnullBgpParameters()) {
+            for (final OptionalCapabilities optCapa : param.nonnullOptionalCapabilities()) {
                 final CParameters cParam = optCapa.getCParameters();
-                if (cParam.augmentation(CParameters1.class) == null
-                        || cParam.augmentation(CParameters1.class).getMultiprotocolCapability() == null) {
-                    continue;
+                if (cParam != null) {
+                    final CParameters1 augment = cParam.augmentation(CParameters1.class);
+                    if (augment != null) {
+                        final MultiprotocolCapability multi = augment.getMultiprotocolCapability();
+                        if (multi != null) {
+                            tables.add(new TablesKey(multi.getAfi(), multi.getSafi()));
+                        }
+                    }
                 }
-                final MultiprotocolCapability multi = cParam.augmentation(CParameters1.class)
-                        .getMultiprotocolCapability();
-                final TablesKey tt = new TablesKey(multi.getAfi(), multi.getSafi());
-                tables.add(tt);
             }
         }
         return tables;