From 48bab93025374720ed215fb4b0b54e71a8b92734 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Thu, 15 Nov 2018 19:17:00 +0100 Subject: [PATCH] Assert route change identifier being IdentifiableItem Rather than doing a straight cast, verify the object beforehand, giving us a proper data instead of a ClassCastException. Change-Id: Ia9dafc9d62028fbe66fc11036d6873821c5ef8a7 JIRA: BGPCEP-848 Signed-off-by: Robert Varga --- .../protocol/bgp/rib/impl/EffectiveRibInWriter.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/EffectiveRibInWriter.java b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/EffectiveRibInWriter.java index 28ffffcb8e..f990fc7802 100644 --- a/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/EffectiveRibInWriter.java +++ b/bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/EffectiveRibInWriter.java @@ -7,6 +7,7 @@ */ package org.opendaylight.protocol.bgp.rib.impl; +import static com.google.common.base.Verify.verify; import static java.util.Objects.requireNonNull; import com.google.common.collect.ImmutableMap; @@ -66,6 +67,8 @@ import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.Identifiable; import org.opendaylight.yangtools.yang.binding.Identifier; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.IdentifiableItem; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.slf4j.Logger; @@ -238,8 +241,11 @@ final class EffectiveRibInWriter implements PrefixesReceivedCounters, PrefixesIn final KeyedInstanceIdentifier tablePath, final Collection> routeChanges) { for (final DataObjectModification routeChanged : routeChanges) { - final I routeKey - = ((InstanceIdentifier.IdentifiableItem) routeChanged.getIdentifier()).getKey(); + final PathArgument routeChangeId = routeChanged.getIdentifier(); + verify(routeChangeId instanceof IdentifiableItem, "Route change %s has invalid identifier %s", + routeChanged, routeChangeId); + final I routeKey = ((IdentifiableItem) routeChangeId).getKey(); + switch (routeChanged.getModificationType()) { case SUBTREE_MODIFIED: case WRITE: -- 2.36.6