Bug-612: ietf-stateful07 serializers - improved code defense. 20/8720/2
authorMilos Fabian <milfabia@cisco.com>
Fri, 4 Jul 2014 09:00:22 +0000 (11:00 +0200)
committerMilos Fabian <milfabia@cisco.com>
Mon, 7 Jul 2014 08:42:34 +0000 (10:42 +0200)
-check mandatory arguments
-set zeros for missing arguments

Change-Id: Iad53dba351aaa7080b660644562782d95bf6bb16
Signed-off-by: Milos Fabian <milfabia@cisco.com>
pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/initiated00/CInitiated00SrpObjectParser.java
pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/initiated00/CInitiated00StatefulCapabilityTlvParser.java
pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07LSPIdentifierIpv4TlvParser.java
pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07LSPIdentifierIpv6TlvParser.java
pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07LspSymbolicNameTlvParser.java
pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07LspUpdateErrorTlvParser.java
pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07RSVPErrorSpecTlvParser.java
pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07SrpObjectParser.java
pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07StatefulCapabilityTlvParser.java

index 37f6ca65bfebc00ce97aafa052fe8123a08ff081..cfbb861fa7c676936527a60fb0de31a525bc4adf 100644 (file)
@@ -7,13 +7,13 @@
  */
 package org.opendaylight.protocol.pcep.ietf.initiated00;
 
-import com.google.common.base.Preconditions;
+import static org.opendaylight.protocol.util.ByteBufWriteUtil.writeBitSet;
+import static org.opendaylight.protocol.util.ByteBufWriteUtil.writeUnsignedInt;
 
+import com.google.common.base.Preconditions;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
-
 import java.util.BitSet;
-
 import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07SrpObjectParser;
 import org.opendaylight.protocol.pcep.spi.ObjectUtil;
 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
@@ -67,8 +67,9 @@ public class CInitiated00SrpObjectParser extends Stateful07SrpObjectParser {
         if (srp.getAugmentation(Srp1.class) != null && srp.getAugmentation(Srp1.class).isRemove()) {
             flags.set(REMOVE_FLAG, srp.getAugmentation(Srp1.class).isRemove());
         }
-        body.writeBytes(ByteArray.bitSetToBytes(flags, FLAGS_SIZE));
-        body.writeInt(srp.getOperationId().getValue().intValue());
+        writeBitSet(flags, FLAGS_SIZE, body);
+        Preconditions.checkArgument(srp.getOperationId() != null, "OperationId is mandatory.");
+        writeUnsignedInt(srp.getOperationId().getValue(), body);
         serializeTlvs(srp.getTlvs(), body);
         ObjectUtil.formatSubobject(TYPE, CLASS, object.isProcessingRule(), object.isIgnore(), body, buffer);
     }
index a3626d368f16e47c0acd1406eca3823bc0db652c..81755f72ed1bbc07183808386757d2cb94a8857d 100644 (file)
@@ -7,13 +7,12 @@
  */
 package org.opendaylight.protocol.pcep.ietf.initiated00;
 
-import com.google.common.base.Preconditions;
+import static org.opendaylight.protocol.util.ByteBufWriteUtil.writeBitSet;
 
+import com.google.common.base.Preconditions;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
-
 import java.util.BitSet;
-
 import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07StatefulCapabilityTlvParser;
 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
 import org.opendaylight.protocol.pcep.spi.TlvUtil;
@@ -53,7 +52,7 @@ public final class CInitiated00StatefulCapabilityTlvParser extends Stateful07Sta
 
     @Override
     public void serializeTlv(final Tlv tlv, final ByteBuf buffer) {
-        Preconditions.checkArgument(tlv != null, "StatefulCapabilityTlv is mandatory.");
+        Preconditions.checkArgument(tlv != null && tlv instanceof Stateful, "StatefulCapabilityTlv is mandatory.");
         final Stateful sct = (Stateful) tlv;
         final ByteBuf body = Unpooled.buffer();
         final BitSet flags = new BitSet(FLAGS_F_LENGTH * Byte.SIZE);
@@ -64,7 +63,7 @@ public final class CInitiated00StatefulCapabilityTlvParser extends Stateful07Sta
         if (sct.isLspUpdateCapability() != null) {
             flags.set(U_FLAG_OFFSET, sct.isLspUpdateCapability());
         }
-        body.writeBytes(ByteArray.bitSetToBytes(flags, FLAGS_F_LENGTH));
+        writeBitSet(flags, FLAGS_F_LENGTH, body);
         TlvUtil.formatTlv(TYPE, body, buffer);
     }
 }
index 793992d9ac9dd8dec05d5cd545279bb16d8ae11b..53ca9098fec17ed36826f2e0f0c826b69b9636aa 100644 (file)
@@ -7,6 +7,10 @@
  */
 package org.opendaylight.protocol.pcep.ietf.stateful07;
 
+import static org.opendaylight.protocol.util.ByteBufWriteUtil.writeIpv4Address;
+import static org.opendaylight.protocol.util.ByteBufWriteUtil.writeShort;
+import static org.opendaylight.protocol.util.ByteBufWriteUtil.writeUnsignedShort;
+
 import com.google.common.base.Preconditions;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
@@ -61,7 +65,7 @@ public final class Stateful07LSPIdentifierIpv4TlvParser implements TlvParser, Tl
 
     @Override
     public void serializeTlv(final Tlv tlv, final ByteBuf buffer) {
-        Preconditions.checkArgument(tlv != null, "LspIdentifiersTlv is mandatory.");
+        Preconditions.checkArgument(tlv != null && tlv instanceof LspIdentifiers, "LspIdentifiersTlv is mandatory.");
         final LspIdentifiers lsp = (LspIdentifiers) tlv;
         final AddressFamily afi = lsp.getAddressFamily();
         final ByteBuf body = Unpooled.buffer();
@@ -69,11 +73,16 @@ public final class Stateful07LSPIdentifierIpv4TlvParser implements TlvParser, Tl
             new Stateful07LSPIdentifierIpv6TlvParser().serializeTlv(tlv, buffer);
         }
         final Ipv4 ipv4 = ((Ipv4Case) afi).getIpv4();
-        body.writeBytes(Ipv4Util.bytesForAddress(ipv4.getIpv4TunnelSenderAddress()));
-        body.writeShort(lsp.getLspId().getValue().shortValue());
-        body.writeShort(lsp.getTunnelId().getValue().shortValue());
-        body.writeBytes(Ipv4Util.bytesForAddress(ipv4.getIpv4ExtendedTunnelId()));
-        body.writeBytes(Ipv4Util.bytesForAddress(ipv4.getIpv4TunnelEndpointAddress()));
+        Preconditions.checkArgument(ipv4.getIpv4TunnelSenderAddress() != null, "Ipv4TunnelSenderAddress is mandatory.");
+        writeIpv4Address(ipv4.getIpv4TunnelSenderAddress(), body);
+        Preconditions.checkArgument(lsp.getLspId() != null, "LspId is mandatory.");
+        writeShort(lsp.getLspId().getValue().shortValue(), body);
+        Preconditions.checkArgument(lsp.getTunnelId() != null, "TunnelId is mandatory.");
+        writeUnsignedShort(lsp.getTunnelId().getValue(), body);
+        Preconditions.checkArgument(ipv4.getIpv4ExtendedTunnelId() != null, "Ipv4ExtendedTunnelId is mandatory.");
+        writeIpv4Address(ipv4.getIpv4ExtendedTunnelId(), body);
+        Preconditions.checkArgument(ipv4.getIpv4TunnelEndpointAddress() != null, "Ipv4TunnelEndpointAddress is mandatory.");
+        writeIpv4Address(ipv4.getIpv4TunnelEndpointAddress(), body);
         TlvUtil.formatTlv(TYPE, body, buffer);
     }
 }
index e155d87f8357e35a1a99ede0edc783329a8a3df5..296c9e4f0d34d5d90dc6209e50781ada24fe0b17 100644 (file)
@@ -7,6 +7,10 @@
  */
 package org.opendaylight.protocol.pcep.ietf.stateful07;
 
+import static org.opendaylight.protocol.util.ByteBufWriteUtil.writeIpv6Address;
+import static org.opendaylight.protocol.util.ByteBufWriteUtil.writeShort;
+import static org.opendaylight.protocol.util.ByteBufWriteUtil.writeUnsignedShort;
+
 import com.google.common.base.Preconditions;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
@@ -60,15 +64,20 @@ public final class Stateful07LSPIdentifierIpv6TlvParser implements TlvParser, Tl
 
     @Override
     public void serializeTlv(final Tlv tlv, final ByteBuf buffer) {
-        Preconditions.checkArgument(tlv != null, "LspIdentifiersTlv is mandatory.");
+        Preconditions.checkArgument(tlv != null && tlv instanceof LspIdentifiers, "LspIdentifiersTlv is mandatory.");
         final LspIdentifiers lsp = (LspIdentifiers) tlv;
         final ByteBuf body = Unpooled.buffer();
         final Ipv6 ipv6 = ((Ipv6Case) lsp.getAddressFamily()).getIpv6();
-        body.writeBytes(Ipv6Util.bytesForAddress(ipv6.getIpv6TunnelSenderAddress()));
-        body.writeShort(lsp.getLspId().getValue().shortValue());
-        body.writeShort(lsp.getTunnelId().getValue().shortValue());
-        body.writeBytes(Ipv6Util.bytesForAddress(ipv6.getIpv6ExtendedTunnelId()));
-        body.writeBytes(Ipv6Util.bytesForAddress(ipv6.getIpv6TunnelEndpointAddress()));
+        Preconditions.checkArgument(ipv6.getIpv6TunnelSenderAddress() != null, "Ipv6TunnelSenderAddress is mandatory.");
+        writeIpv6Address(ipv6.getIpv6TunnelSenderAddress(), body);
+        Preconditions.checkArgument(lsp.getLspId() != null, "LspId is mandatory.");
+        writeShort(lsp.getLspId().getValue().shortValue(), body);
+        Preconditions.checkArgument(lsp.getTunnelId() != null, "TunnelId is mandatory.");
+        writeUnsignedShort(lsp.getTunnelId().getValue(), body);
+        Preconditions.checkArgument(ipv6.getIpv6ExtendedTunnelId() != null, "Ipv6ExtendedTunnelId is mandatory.");
+        writeIpv6Address(ipv6.getIpv6ExtendedTunnelId(), body);
+        Preconditions.checkArgument(ipv6.getIpv6TunnelEndpointAddress() != null, "Ipv6TunnelEndpointAddress is mandatory.");
+        writeIpv6Address(ipv6.getIpv6TunnelEndpointAddress(), body);
         TlvUtil.formatTlv(TYPE, body, buffer);
     }
 }
index 1c4093d8667d6c26acd83a81b7a738ae8e39899a..f2bfc1880a76e0327d44ce9bc6cc51cce5e5f377 100644 (file)
@@ -8,10 +8,8 @@
 package org.opendaylight.protocol.pcep.ietf.stateful07;
 
 import com.google.common.base.Preconditions;
-
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
-
 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
 import org.opendaylight.protocol.pcep.spi.TlvParser;
 import org.opendaylight.protocol.pcep.spi.TlvSerializer;
@@ -39,7 +37,9 @@ public final class Stateful07LspSymbolicNameTlvParser implements TlvParser, TlvS
 
     @Override
     public void serializeTlv(final Tlv tlv, final ByteBuf buffer) {
-        Preconditions.checkArgument(tlv != null, "SymbolicPathNameTlv is mandatory.");
-        TlvUtil.formatTlv(TYPE, Unpooled.copiedBuffer(((SymbolicPathName) tlv).getPathName().getValue()), buffer);
+        Preconditions.checkArgument(tlv != null && tlv instanceof SymbolicPathName, "SymbolicPathNameTlv is mandatory.");
+        final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.SymbolicPathName spn = ((SymbolicPathName) tlv).getPathName();
+        Preconditions.checkArgument(spn != null, "SymbolicPathName is mandatory");
+        TlvUtil.formatTlv(TYPE, Unpooled.copiedBuffer(spn.getValue()), buffer);
     }
 }
index afdc23dd332f380f991c76a5c694bfc3300bb5fb..9e8eecf9021c39b577e196a2c8e64fb38d21baa7 100644 (file)
@@ -7,11 +7,11 @@
  */
 package org.opendaylight.protocol.pcep.ietf.stateful07;
 
-import com.google.common.base.Preconditions;
+import static org.opendaylight.protocol.util.ByteBufWriteUtil.writeUnsignedInt;
 
+import com.google.common.base.Preconditions;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
-
 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
 import org.opendaylight.protocol.pcep.spi.TlvParser;
 import org.opendaylight.protocol.pcep.spi.TlvSerializer;
@@ -27,6 +27,8 @@ public final class Stateful07LspUpdateErrorTlvParser implements TlvParser, TlvSe
 
     public static final int TYPE = 20;
 
+    private static final int CONTENT_LENGTH = Integer.SIZE / Byte.SIZE;
+
     @Override
     public LspErrorCode parseTlv(final ByteBuf buffer) throws PCEPDeserializerException {
         if (buffer == null) {
@@ -37,7 +39,9 @@ public final class Stateful07LspUpdateErrorTlvParser implements TlvParser, TlvSe
 
     @Override
     public void serializeTlv(final Tlv tlv, final ByteBuf buffer) {
-        Preconditions.checkArgument(tlv != null, "LspErrorCodeTlv is mandatory.");
-        TlvUtil.formatTlv(TYPE, Unpooled.copyInt(((LspErrorCode) tlv).getErrorCode().intValue()), buffer);
+        Preconditions.checkArgument(tlv != null && tlv instanceof LspErrorCode, "LspErrorCodeTlv is mandatory.");
+        final ByteBuf body = Unpooled.buffer(CONTENT_LENGTH);
+        writeUnsignedInt(((LspErrorCode) tlv).getErrorCode(), body);
+        TlvUtil.formatTlv(TYPE, body, buffer);
     }
 }
index ee6d234953006572e064d8da4e8b423845300136..9ea37f184810a902e6c8219abb71365c75958105 100644 (file)
@@ -7,6 +7,13 @@
  */
 package org.opendaylight.protocol.pcep.ietf.stateful07;
 
+import static org.opendaylight.protocol.util.ByteBufWriteUtil.writeBitSet;
+import static org.opendaylight.protocol.util.ByteBufWriteUtil.writeIpv4Address;
+import static org.opendaylight.protocol.util.ByteBufWriteUtil.writeIpv6Address;
+import static org.opendaylight.protocol.util.ByteBufWriteUtil.writeUnsignedByte;
+import static org.opendaylight.protocol.util.ByteBufWriteUtil.writeUnsignedInt;
+import static org.opendaylight.protocol.util.ByteBufWriteUtil.writeUnsignedShort;
+
 import com.google.common.base.Preconditions;
 import com.google.common.primitives.UnsignedBytes;
 import io.netty.buffer.ByteBuf;
@@ -101,10 +108,12 @@ public final class Stateful07RSVPErrorSpecTlvParser implements TlvParser, TlvSer
         byte[] desc = (ue.getDescription() == null) ? new byte[0] : ue.getDescription().getBytes();
         body.writeByte(USER_ERROR_CLASS_NUM);
         body.writeByte(USER_ERROR_CLASS_TYPE);
-        body.writeInt(ue.getEnterprise().getValue().intValue());
-        body.writeByte(ue.getSubOrg());
+        Preconditions.checkArgument(ue.getEnterprise() != null, "EnterpriseNumber is mandatory");
+        writeUnsignedInt(ue.getEnterprise().getValue(), body);
+        writeUnsignedByte(ue.getSubOrg(), body);
         body.writeByte(desc.length);
-        body.writeShort(ue.getValue().shortValue());
+        Preconditions.checkArgument(ue.getValue() != null, "Value is mandatory.");
+        writeUnsignedShort(ue.getValue(), body);
         body.writeBytes(desc);
     }
 
@@ -129,17 +138,20 @@ public final class Stateful07RSVPErrorSpecTlvParser implements TlvParser, TlvSer
         flags.set(IN_PLACE_FLAG_OFFSET, rsvp.getFlags().isInPlace());
         flags.set(NOT_GUILTY_FLAGS_OFFSET, rsvp.getFlags().isNotGuilty());
         final IpAddress node = rsvp.getNode();
+        Preconditions.checkArgument(node != null, "Node is mandatory.");
         if (node.getIpv4Address() != null) {
             body.writeByte(RSVP_ERROR_CLASS_NUM);
             body.writeByte(RSVP_IPV4_ERROR_CLASS_TYPE);
-            body.writeBytes(Ipv4Util.bytesForAddress(node.getIpv4Address()));
+            writeIpv4Address(node.getIpv4Address(), body);
         } else {
             body.writeByte(RSVP_ERROR_CLASS_NUM);
             body.writeByte(RSVP_IPV6_ERROR_CLASS_TYPE);
-            body.writeBytes(Ipv6Util.bytesForAddress(node.getIpv6Address()));
+            writeIpv6Address(node.getIpv6Address(), body);
         }
-        body.writeBytes(ByteArray.bitSetToBytes(flags, FLAGS_F_LENGTH));
-        body.writeByte(rsvp.getCode());
-        body.writeShort(rsvp.getValue().shortValue());
+        writeBitSet(flags, FLAGS_F_LENGTH, body);
+        Preconditions.checkArgument(rsvp.getCode() != null, "Code is mandatory.");
+        writeUnsignedByte(rsvp.getCode(), body);
+        Preconditions.checkArgument(rsvp.getValue() != null, "Value is mandatory.");
+        writeUnsignedShort(rsvp.getValue(), body);
     }
 }
index f6c4316291e84e1abf6929bab39ab93e58aec89a..a40cbdef98f4f2e1bbb6f7b6686b10edd960fd6b 100644 (file)
@@ -7,11 +7,11 @@
  */
 package org.opendaylight.protocol.pcep.ietf.stateful07;
 
-import com.google.common.base.Preconditions;
+import static org.opendaylight.protocol.util.ByteBufWriteUtil.writeUnsignedInt;
 
+import com.google.common.base.Preconditions;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
-
 import org.opendaylight.protocol.pcep.spi.AbstractObjectWithTlvsParser;
 import org.opendaylight.protocol.pcep.spi.ObjectUtil;
 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
@@ -78,8 +78,9 @@ public class Stateful07SrpObjectParser extends AbstractObjectWithTlvsParser<SrpB
         final Srp srp = (Srp) object;
         final ByteBuf body = Unpooled.buffer();
         body.writerIndex(body.writerIndex() + FLAGS_SIZE);
-        final Long id = srp.getOperationId().getValue();
-        body.writeInt(id.intValue());
+        final SrpIdNumber srpId = srp.getOperationId();
+        Preconditions.checkArgument(srpId != null, "SrpId is mandatory.");
+        writeUnsignedInt(srpId.getValue(), body);
         serializeTlvs(srp.getTlvs(), body);
         ObjectUtil.formatSubobject(TYPE, CLASS, object.isProcessingRule(), object.isIgnore(), body, buffer);
     }
index 26abb3cba63a24eeedb75c13c1d25696b34f714b..e21f99031fbab7a6bc74b3b6c378bb092e577d66 100644 (file)
@@ -7,13 +7,12 @@
  */
 package org.opendaylight.protocol.pcep.ietf.stateful07;
 
-import com.google.common.base.Preconditions;
+import static org.opendaylight.protocol.util.ByteBufWriteUtil.writeBitSet;
 
+import com.google.common.base.Preconditions;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
-
 import java.util.BitSet;
-
 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
 import org.opendaylight.protocol.pcep.spi.TlvParser;
 import org.opendaylight.protocol.pcep.spi.TlvSerializer;
@@ -52,14 +51,14 @@ public class Stateful07StatefulCapabilityTlvParser implements TlvParser, TlvSeri
 
     @Override
     public void serializeTlv(final Tlv tlv, final ByteBuf buffer) {
-        Preconditions.checkArgument(tlv != null, "StatefulCapabilityTlv is mandatory.");
+        Preconditions.checkArgument(tlv != null && tlv instanceof Stateful, "StatefulCapabilityTlv is mandatory.");
         final Stateful sct = (Stateful) tlv;
         final ByteBuf body = Unpooled.buffer();
         final BitSet flags = new BitSet(FLAGS_F_LENGTH * Byte.SIZE);
         if (sct.isLspUpdateCapability() != null) {
             flags.set(U_FLAG_OFFSET, sct.isLspUpdateCapability());
         }
-        body.writeBytes(ByteArray.bitSetToBytes(flags, FLAGS_F_LENGTH));
+        writeBitSet(flags, FLAGS_F_LENGTH, body);
         TlvUtil.formatTlv(TYPE, body, buffer);
     }
 }