diff --git a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/MpUnReachNlri.java b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/MpUnReachNlri.java
index 0931773..076d8dd 100644
--- a/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/MpUnReachNlri.java
+++ b/protocols/bgp/bgpio/src/main/java/org/onosproject/bgpio/types/MpUnReachNlri.java
@@ -154,63 +154,65 @@
                                                && ((safi == Constants.SAFI_FLOWSPEC_VALUE)
                                                || (safi == Constants.VPN_SAFI_FLOWSPEC_VALUE))) {
                 List<BgpValueType> flowSpecComponents = new LinkedList<>();
-                BgpValueType flowSpecComponent = null;
 
-                short totNlriLen = tempCb.getByte(tempCb.readerIndex());
-                if (totNlriLen >= FLOW_SPEC_LEN) {
-                    totNlriLen = tempCb.readShort();
-                } else {
-                    totNlriLen = tempCb.readByte();
-                }
-                if (tempCb.readableBytes() < totNlriLen) {
-                    Validation.validateLen(BgpErrorType.UPDATE_MESSAGE_ERROR,
-                            BgpErrorType.ATTRIBUTE_LENGTH_ERROR, totNlriLen);
-                }
-                tempBuf = tempCb.readBytes(totNlriLen);
-                while (tempBuf.readableBytes() > 0) {
-                    short type = tempBuf.readByte();
-                    switch (type) {
-                    case Constants.BGP_FLOWSPEC_DST_PREFIX:
-                        flowSpecComponent = BgpFsDestinationPrefix.read(tempBuf);
-                        break;
-                    case Constants.BGP_FLOWSPEC_SRC_PREFIX:
-                        flowSpecComponent = BgpFsSourcePrefix.read(tempBuf);
-                        break;
-                    case Constants.BGP_FLOWSPEC_IP_PROTO:
-                        flowSpecComponent = BgpFsIpProtocol.read(tempBuf);
-                        break;
-                    case Constants.BGP_FLOWSPEC_PORT:
-                        flowSpecComponent = BgpFsPortNum.read(tempBuf);
-                        break;
-                    case Constants.BGP_FLOWSPEC_DST_PORT:
-                        flowSpecComponent = BgpFsDestinationPortNum.read(tempBuf);
-                        break;
-                    case Constants.BGP_FLOWSPEC_SRC_PORT:
-                        flowSpecComponent = BgpFsSourcePortNum.read(tempBuf);
-                        break;
-                    case Constants.BGP_FLOWSPEC_ICMP_TP:
-                        flowSpecComponent = BgpFsIcmpType.read(tempBuf);
-                        break;
-                    case Constants.BGP_FLOWSPEC_ICMP_CD:
-                        flowSpecComponent = BgpFsIcmpType.read(tempBuf);
-                        break;
-                    case Constants.BGP_FLOWSPEC_TCP_FLAGS:
-                        flowSpecComponent = BgpFsTcpFlags.read(tempBuf);
-                        break;
-                    case Constants.BGP_FLOWSPEC_PCK_LEN:
-                        flowSpecComponent = BgpFsPacketLength.read(tempBuf);
-                        break;
-                    case Constants.BGP_FLOWSPEC_DSCP:
-                        flowSpecComponent = BgpFsDscpValue.read(tempBuf);
-                        break;
-                    case Constants.BGP_FLOWSPEC_FRAGMENT:
-                        flowSpecComponent = BgpFsFragment.read(tempBuf);
-                        break;
-                    default:
-                        log.debug("flow spec type not supported" + type);
-                        break;
+                if (tempCb.readableBytes() > 0) {
+                    BgpValueType flowSpecComponent = null;
+                    short totNlriLen = tempCb.getByte(tempCb.readerIndex());
+                    if (totNlriLen >= FLOW_SPEC_LEN) {
+                        totNlriLen = tempCb.readShort();
+                    } else {
+                        totNlriLen = tempCb.readByte();
                     }
-                    flowSpecComponents.add(flowSpecComponent);
+                    if (tempCb.readableBytes() < totNlriLen) {
+                        Validation.validateLen(BgpErrorType.UPDATE_MESSAGE_ERROR,
+                                BgpErrorType.ATTRIBUTE_LENGTH_ERROR, totNlriLen);
+                    }
+                    tempBuf = tempCb.readBytes(totNlriLen);
+                    while (tempBuf.readableBytes() > 0) {
+                        short type = tempBuf.readByte();
+                        switch (type) {
+                        case Constants.BGP_FLOWSPEC_DST_PREFIX:
+                            flowSpecComponent = BgpFsDestinationPrefix.read(tempBuf);
+                            break;
+                        case Constants.BGP_FLOWSPEC_SRC_PREFIX:
+                            flowSpecComponent = BgpFsSourcePrefix.read(tempBuf);
+                            break;
+                        case Constants.BGP_FLOWSPEC_IP_PROTO:
+                            flowSpecComponent = BgpFsIpProtocol.read(tempBuf);
+                            break;
+                        case Constants.BGP_FLOWSPEC_PORT:
+                            flowSpecComponent = BgpFsPortNum.read(tempBuf);
+                            break;
+                        case Constants.BGP_FLOWSPEC_DST_PORT:
+                            flowSpecComponent = BgpFsDestinationPortNum.read(tempBuf);
+                            break;
+                        case Constants.BGP_FLOWSPEC_SRC_PORT:
+                            flowSpecComponent = BgpFsSourcePortNum.read(tempBuf);
+                            break;
+                        case Constants.BGP_FLOWSPEC_ICMP_TP:
+                            flowSpecComponent = BgpFsIcmpType.read(tempBuf);
+                            break;
+                        case Constants.BGP_FLOWSPEC_ICMP_CD:
+                            flowSpecComponent = BgpFsIcmpType.read(tempBuf);
+                            break;
+                        case Constants.BGP_FLOWSPEC_TCP_FLAGS:
+                            flowSpecComponent = BgpFsTcpFlags.read(tempBuf);
+                            break;
+                        case Constants.BGP_FLOWSPEC_PCK_LEN:
+                            flowSpecComponent = BgpFsPacketLength.read(tempBuf);
+                            break;
+                        case Constants.BGP_FLOWSPEC_DSCP:
+                            flowSpecComponent = BgpFsDscpValue.read(tempBuf);
+                            break;
+                        case Constants.BGP_FLOWSPEC_FRAGMENT:
+                            flowSpecComponent = BgpFsFragment.read(tempBuf);
+                            break;
+                        default:
+                            log.debug("flow spec type not supported" + type);
+                            break;
+                        }
+                        flowSpecComponents.add(flowSpecComponent);
+                    }
                 }
                 return new MpUnReachNlri(new BgpFlowSpecDetails(flowSpecComponents), afi, safi);
             } else {
