Fix potential ByteBuf leaks in bgp-labeled-unicast 48/96948/1
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 20 Jul 2021 15:33:18 +0000 (17:33 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 20 Jul 2021 15:33:36 +0000 (17:33 +0200)
We are using ByteBuf.readBytes() to actually skip over some content,
use ByteBuf.skipBytes() instead.

JIRA: BGPCEP-973
Change-Id: I1bcdcc47b7ac6352e5bdc80064d40cf4692e7eb6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
bgp/extensions/labeled-unicast/src/main/java/org/opendaylight/protocol/bgp/labeled/unicast/LabelIndexTlvParser.java
bgp/extensions/labeled-unicast/src/main/java/org/opendaylight/protocol/bgp/labeled/unicast/OriginatorSrgbTlvParser.java

index e5c1ef0b31b03926117f5eb9190c7281650965a6..6e5833955261db8351dc190ae489cec21341291c 100644 (file)
@@ -24,15 +24,13 @@ final class LabelIndexTlvParser implements BgpPrefixSidTlvParser, BgpPrefixSidTl
     @Override
     public void serializeBgpPrefixSidTlv(final BgpPrefixSidTlv tlv, final ByteBuf valueBuf) {
         Preconditions.checkArgument(tlv instanceof LuLabelIndexTlv, "Incoming TLV is not LuLabelIndexTlv");
-        valueBuf.writeZero(RESERVED);
-        valueBuf.writeZero(LABEL_INDEX_FLAGS_BYTES);
+        valueBuf.writeZero(RESERVED + LABEL_INDEX_FLAGS_BYTES);
         valueBuf.writeInt(((LuLabelIndexTlv) tlv).getLabelIndexTlv().intValue());
     }
 
     @Override
     public LuLabelIndexTlv parseBgpPrefixSidTlv(final ByteBuf buffer) {
-        buffer.readBytes(RESERVED);
-        buffer.readBytes(LABEL_INDEX_FLAGS_BYTES);
+        buffer.skipBytes(RESERVED + LABEL_INDEX_FLAGS_BYTES);
         return new LuLabelIndexTlvBuilder().setLabelIndexTlv(ByteBufUtils.readUint32(buffer)).build();
     }
 
index cef5ad669de39d9352453550da472b318e4ccb93..0536026aeac6a02b0a076d8369aad672b6119493 100644 (file)
@@ -7,10 +7,11 @@
  */
 package org.opendaylight.protocol.bgp.labeled.unicast;
 
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkState;
 import static org.opendaylight.mdsal.rfc8294.netty.RFC8294ByteBufUtils.readUint24;
 import static org.opendaylight.mdsal.rfc8294.netty.RFC8294ByteBufUtils.writeUint24;
 
-import com.google.common.base.Preconditions;
 import io.netty.buffer.ByteBuf;
 import java.util.ArrayList;
 import java.util.List;
@@ -31,14 +32,13 @@ final class OriginatorSrgbTlvParser implements BgpPrefixSidTlvParser, BgpPrefixS
 
     @Override
     public LuOriginatorSrgbTlv parseBgpPrefixSidTlv(final ByteBuf buffer) {
-        buffer.readBytes(ORIGINATOR_FLAGS_BYTES);
+        buffer.skipBytes(ORIGINATOR_FLAGS_BYTES);
         final List<SrgbValue> srgbList = parseSrgbs(buffer);
         return new LuOriginatorSrgbTlvBuilder().setSrgbValue(srgbList).build();
     }
 
     private static List<SrgbValue> parseSrgbs(final ByteBuf buffer) {
-        Preconditions.checkState(buffer.readableBytes() % SRGB_LENGTH == 0,
-                "Number of SRGBs does not fit available bytes.");
+        checkState(buffer.readableBytes() % SRGB_LENGTH == 0, "Number of SRGBs does not fit available bytes.");
         final List<SrgbValue> ret = new ArrayList<>();
         while (buffer.isReadable()) {
             ret.add(new SrgbValueBuilder()
@@ -51,7 +51,7 @@ final class OriginatorSrgbTlvParser implements BgpPrefixSidTlvParser, BgpPrefixS
 
     @Override
     public void serializeBgpPrefixSidTlv(final BgpPrefixSidTlv tlv, final ByteBuf valueBuf) {
-        Preconditions.checkArgument(tlv instanceof LuOriginatorSrgbTlv, "Incoming TLV is not LuOriginatorSrgbTlv");
+        checkArgument(tlv instanceof LuOriginatorSrgbTlv, "Incoming TLV is not LuOriginatorSrgbTlv");
         final LuOriginatorSrgbTlv luTlv = (LuOriginatorSrgbTlv) tlv;
         valueBuf.writeZero(ORIGINATOR_FLAGS_BYTES);
         for (final SrgbValue val : luTlv.nonnullSrgbValue()) {