QPID-7932: [Java Broker, AMQP 1.0] Improve Error handling for decoding invalid 
byte streams


Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/2402b637
Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/2402b637
Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/2402b637

Branch: refs/heads/master
Commit: 2402b63796a0fb81455d6842669017676860e169
Parents: d4d408f
Author: Lorenz Quack <lqu...@apache.org>
Authored: Fri Sep 29 12:40:10 2017 +0100
Committer: Lorenz Quack <lqu...@apache.org>
Committed: Fri Sep 29 13:32:00 2017 +0100

----------------------------------------------------------------------
 .../tuple/MessageMetaDataBinding.java           |   2 +-
 .../server/bytebuffer/QpidByteBufferUtils.java  |   5 +
 .../v1/MessageStoreSerializer_v1.java           |  12 +-
 .../protocol/v1_0/MessageMetaData_1_0.java      |   5 +-
 .../codec/AbstractCompositeTypeConstructor.java |  30 ++-
 .../v1_0/codec/ArrayTypeConstructor.java        |  18 +-
 .../v1_0/codec/BinaryTypeConstructor.java       |  18 +-
 .../protocol/v1_0/codec/BooleanConstructor.java |   5 +-
 .../v1_0/codec/ByteTypeConstructor.java         |  13 +-
 .../v1_0/codec/CharTypeConstructor.java         |   6 +-
 .../protocol/v1_0/codec/DecimalConstructor.java |   8 +-
 .../v1_0/codec/DoubleTypeConstructor.java       |  10 +-
 .../v1_0/codec/FloatTypeConstructor.java        |  12 +-
 .../protocol/v1_0/codec/IntTypeConstructor.java |  12 +-
 .../protocol/v1_0/codec/ListConstructor.java    |   2 +-
 .../v1_0/codec/LongTypeConstructor.java         |  12 +-
 .../protocol/v1_0/codec/MapConstructor.java     |  28 +--
 .../v1_0/codec/NullTypeConstructor.java         |   2 +-
 .../v1_0/codec/ShortTypeConstructor.java        |  12 +-
 .../v1_0/codec/SmallIntConstructor.java         |  12 +-
 .../v1_0/codec/SmallLongConstructor.java        |  12 +-
 .../v1_0/codec/SmallUIntConstructor.java        |  12 +-
 .../v1_0/codec/SmallULongConstructor.java       |  12 +-
 .../v1_0/codec/StringTypeConstructor.java       |  33 ++--
 .../v1_0/codec/SymbolTypeConstructor.java       |  34 ++--
 .../v1_0/codec/TimestampTypeConstructor.java    |   8 +-
 .../v1_0/codec/UByteTypeConstructor.java        |  13 +-
 .../v1_0/codec/UIntTypeConstructor.java         |  13 +-
 .../v1_0/codec/ULongTypeConstructor.java        |  13 +-
 .../v1_0/codec/UShortTypeConstructor.java       |  14 +-
 .../v1_0/codec/UUIDTypeConstructor.java         |   9 +-
 .../protocol/v1_0/codec/ValueHandler.java       |   3 +-
 .../v1_0/codec/ZeroListConstructor.java         |   2 +-
 .../v1_0/codec/ZeroUIntConstructor.java         |   1 -
 .../v1_0/codec/ZeroULongConstructor.java        |   2 +-
 .../protocol/v1_0/framing/FrameHandler.java     |   3 +-
 .../protocol/v1_0/messaging/SectionDecoder.java |   3 -
 .../v1_0/messaging/SectionDecoderImpl.java      |   8 -
 .../v1_0/type/messaging/AbstractSection.java    |   7 +
 .../codec/AmqpValueSectionConstructor.java      |  43 +++-
 .../messaging/codec/DataSectionConstructor.java |  14 +-
 .../codec/DescribedListSectionConstructor.java  |  16 +-
 .../codec/DescribedMapSectionConstructor.java   |  14 +-
 .../protocol/v1_0/codec/ValueHandlerTest.java   | 196 +++++++++++++++++++
 .../store/jdbc/AbstractJDBCMessageStore.java    |   2 +-
 45 files changed, 473 insertions(+), 238 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/tuple/MessageMetaDataBinding.java
----------------------------------------------------------------------
diff --git 
a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/tuple/MessageMetaDataBinding.java
 
b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/tuple/MessageMetaDataBinding.java
index 798b097..0fd3e44 100644
--- 
a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/tuple/MessageMetaDataBinding.java
+++ 
b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/tuple/MessageMetaDataBinding.java
@@ -71,7 +71,7 @@ public class MessageMetaDataBinding implements 
EntryBinding<StorableMessageMetaD
             }
             return metaData;
         }
-        catch (IOException e)
+        catch (IOException | RuntimeException e)
         {
             throw new StoreException(String.format("Unable to convert entry %s 
to metadata", entry));
         }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-core/src/main/java/org/apache/qpid/server/bytebuffer/QpidByteBufferUtils.java
----------------------------------------------------------------------
diff --git 
a/broker-core/src/main/java/org/apache/qpid/server/bytebuffer/QpidByteBufferUtils.java
 
b/broker-core/src/main/java/org/apache/qpid/server/bytebuffer/QpidByteBufferUtils.java
index 57552a8..2592559 100644
--- 
a/broker-core/src/main/java/org/apache/qpid/server/bytebuffer/QpidByteBufferUtils.java
+++ 
b/broker-core/src/main/java/org/apache/qpid/server/bytebuffer/QpidByteBufferUtils.java
@@ -267,5 +267,10 @@ public class QpidByteBufferUtils
             }
             i++;
         }
+
+        if (skipped != length)
+        {
+            throw new BufferUnderflowException();
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-core/src/main/java/org/apache/qpid/server/store/serializer/v1/MessageStoreSerializer_v1.java
----------------------------------------------------------------------
diff --git 
a/broker-core/src/main/java/org/apache/qpid/server/store/serializer/v1/MessageStoreSerializer_v1.java
 
b/broker-core/src/main/java/org/apache/qpid/server/store/serializer/v1/MessageStoreSerializer_v1.java
index 9f0098a..c75b930 100644
--- 
a/broker-core/src/main/java/org/apache/qpid/server/store/serializer/v1/MessageStoreSerializer_v1.java
+++ 
b/broker-core/src/main/java/org/apache/qpid/server/store/serializer/v1/MessageStoreSerializer_v1.java
@@ -46,6 +46,7 @@ import 
org.apache.qpid.server.store.handler.DistributedTransactionHandler;
 import org.apache.qpid.server.store.handler.MessageHandler;
 import org.apache.qpid.server.store.handler.MessageInstanceHandler;
 import org.apache.qpid.server.store.serializer.MessageStoreSerializer;
+import org.apache.qpid.server.util.ConnectionScopedRuntimeException;
 
 @PluggableService
 public class MessageStoreSerializer_v1 implements MessageStoreSerializer
@@ -307,8 +308,15 @@ public class MessageStoreSerializer_v1 implements 
MessageStoreSerializer
             final MessageMetaDataType metaDataType =
                     MessageMetaDataTypeRegistry.fromOrdinal(metaData[0] & 
0xff);
             QpidByteBuffer buf = QpidByteBuffer.wrap(metaData, 1, 
metaData.length - 1);
-            final StorableMessageMetaData storableMessageMetaData =
-                    
metaDataType.createMetaData(Collections.singletonList(buf));
+            final StorableMessageMetaData storableMessageMetaData;
+            try
+            {
+                storableMessageMetaData = 
metaDataType.createMetaData(Collections.singletonList(buf));
+            }
+            catch (ConnectionScopedRuntimeException e)
+            {
+                throw new IllegalArgumentException("Could not deserialize 
message metadata", e);
+            }
             buf.dispose();
             final MessageHandle<StorableMessageMetaData> handle =
                     store.addMessage(storableMessageMetaData);

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageMetaData_1_0.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageMetaData_1_0.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageMetaData_1_0.java
index 5b6d6b8..6d59a15 100755
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageMetaData_1_0.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageMetaData_1_0.java
@@ -438,6 +438,10 @@ public class MessageMetaData_1_0 implements 
StorableMessageMetaData
                 long contentSize = 0;
                 if (versionByte == 1)
                 {
+                    if (!QpidByteBufferUtils.hasRemaining(bufs, 17))
+                    {
+                        throw new ConnectionScopedRuntimeException("Cannot 
decode stored message meta data.");
+                    }
                     // we can discard the first byte
                     QpidByteBufferUtils.get(bufs);
                     arrivalTime = QpidByteBufferUtils.getLong(bufs);
@@ -479,7 +483,6 @@ public class MessageMetaData_1_0 implements 
StorableMessageMetaData
             }
             catch (AmqpErrorException e)
             {
-                //TODO
                 throw new ConnectionScopedRuntimeException(e);
             }
         }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/AbstractCompositeTypeConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/AbstractCompositeTypeConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/AbstractCompositeTypeConstructor.java
index c417b69..00a1252 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/AbstractCompositeTypeConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/AbstractCompositeTypeConstructor.java
@@ -62,13 +62,13 @@ public abstract class AbstractCompositeTypeConstructor<T> 
implements DescribedTy
 
         private T constructType() throws AmqpErrorException
         {
+            int size;
             final TypeConstructor typeConstructor = 
_valueHandler.readConstructor(_in);
+            long remaining = QpidByteBufferUtils.remaining(_in);
             if (typeConstructor instanceof ListConstructor)
             {
                 ListConstructor listConstructor = (ListConstructor) 
typeConstructor;
-                int size;
-                long remaining = QpidByteBufferUtils.remaining(_in);
-                if (remaining < listConstructor.getSize())
+                if (remaining < listConstructor.getSize() * 2)
                 {
                     throw new AmqpErrorException(AmqpError.DECODE_ERROR,
                                                  String.format("Not sufficient 
data for deserialization of '%s'."
@@ -102,6 +102,7 @@ public abstract class AbstractCompositeTypeConstructor<T> 
implements DescribedTy
             }
             else if (typeConstructor instanceof ZeroListConstructor)
             {
+                size = 0;
                 _count = 0;
             }
             else
@@ -110,7 +111,28 @@ public abstract class AbstractCompositeTypeConstructor<T> 
implements DescribedTy
                                              String.format("Unexpected format 
when deserializing of '%s'",
                                                            getTypeName()));
             }
-            return AbstractCompositeTypeConstructor.this.construct(this);
+
+            final T constructedObject = 
AbstractCompositeTypeConstructor.this.construct(this);
+
+            long expectedRemaining = remaining - size;
+            long unconsumedBytes = QpidByteBufferUtils.remaining(_in) - 
expectedRemaining;
+            if(unconsumedBytes > 0)
+            {
+                final String msg =
+                        String.format("%s incorrectly encoded, %d bytes 
remaining after decoding %d elements",
+                                      getTypeName(), unconsumedBytes, _count);
+                throw new AmqpErrorException(AmqpError.DECODE_ERROR, msg);
+            }
+            else if (unconsumedBytes < 0)
+            {
+                final String msg = String.format(
+                        "%s incorrectly encoded, %d bytes beyond provided size 
consumed after decoding %d elements",
+                        getTypeName(),
+                        -unconsumedBytes,
+                        _count);
+                throw new AmqpErrorException(AmqpError.DECODE_ERROR, msg);
+            }
+            return constructedObject;
         }
 
 

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ArrayTypeConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ArrayTypeConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ArrayTypeConstructor.java
index 0545f76..a25f506 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ArrayTypeConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ArrayTypeConstructor.java
@@ -51,19 +51,23 @@ public abstract class ArrayTypeConstructor implements 
TypeConstructor<Object[]>
         {
             rval.add(t.construct(in, handler));
         }
-        long unconsumedBytes = remaining - (QpidByteBufferUtils.remaining(in) 
+ (long) size);
 
+        long expectedRemaining = remaining - size;
+        long unconsumedBytes = QpidByteBufferUtils.remaining(in) - 
expectedRemaining;
         if(unconsumedBytes > 0)
         {
-            throw new AmqpErrorException(AmqpError.DECODE_ERROR,
-                                         "Array incorrectly encoded, %d bytes 
remaining after decoding %d elements",
-                                         unconsumedBytes, count);
+            final String msg = String.format("Array incorrectly encoded, %d 
bytes remaining after decoding %d elements",
+                                             unconsumedBytes,
+                                             count);
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, msg);
         }
         else if (unconsumedBytes < 0)
         {
-            throw new AmqpErrorException(AmqpError.DECODE_ERROR,
-                                         "Array incorrectly encoded, %d bytes 
beyond provided size consumed after decoding %d elements",
-                                         -unconsumedBytes, count);
+            final String msg = String.format(
+                    "Array incorrectly encoded, %d bytes beyond provided size 
consumed after decoding %d elements",
+                    -unconsumedBytes,
+                    count);
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, msg);
         }
         if(rval.size() == 0)
         {

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/BinaryTypeConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/BinaryTypeConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/BinaryTypeConstructor.java
index 486bea0..622e9ea 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/BinaryTypeConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/BinaryTypeConstructor.java
@@ -25,7 +25,7 @@ import java.util.List;
 import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
 import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
 import org.apache.qpid.server.protocol.v1_0.type.Binary;
-import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
+import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 
 public class BinaryTypeConstructor extends VariableWidthTypeConstructor
 {
@@ -49,7 +49,12 @@ public class BinaryTypeConstructor extends 
VariableWidthTypeConstructor
 
         int size;
 
-        if(getSize() == 1)
+        if (!QpidByteBufferUtils.hasRemaining(in, getSize()))
+        {
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct binary: insufficient input data");
+        }
+
+        if (getSize() == 1)
         {
             size = QpidByteBufferUtils.get(in) & 0xFF;
         }
@@ -58,16 +63,13 @@ public class BinaryTypeConstructor extends 
VariableWidthTypeConstructor
             size = QpidByteBufferUtils.getInt(in);
         }
 
-        if(!QpidByteBufferUtils.hasRemaining(in, size))
+        if (!QpidByteBufferUtils.hasRemaining(in, size))
         {
-            org.apache.qpid.server.protocol.v1_0.type.transport.Error error = 
new org.apache.qpid.server.protocol.v1_0.type.transport.Error();
-            error.setCondition(ConnectionError.FRAMING_ERROR);
-            error.setDescription("Cannot construct binary: insufficient input 
data");
-            throw new AmqpErrorException(error);
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct binary: insufficient input data");
         }
 
         byte[] data = new byte[size];
-        QpidByteBufferUtils.get(in,data);
+        QpidByteBufferUtils.get(in, data);
         return new Binary(data);
     }
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/BooleanConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/BooleanConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/BooleanConstructor.java
index 1d7310d..08431cd 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/BooleanConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/BooleanConstructor.java
@@ -62,10 +62,7 @@ public class BooleanConstructor
             }
             else
             {
-                org.apache.qpid.server.protocol.v1_0.type.transport.Error 
error = new Error();
-                error.setCondition(ConnectionError.FRAMING_ERROR);
-                error.setDescription("Cannot construct boolean: insufficient 
input data");
-                throw new AmqpErrorException(error);
+                throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct boolean: insufficient input data");
             }
         }
     };

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ByteTypeConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ByteTypeConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ByteTypeConstructor.java
index 2fa9e41..47213cd 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ByteTypeConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ByteTypeConstructor.java
@@ -22,11 +22,10 @@ package org.apache.qpid.server.protocol.v1_0.codec;
 
 import java.util.List;
 
-import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
-import org.apache.qpid.server.protocol.v1_0.type.*;
-import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
-import org.apache.qpid.server.protocol.v1_0.type.transport.Error;
 import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
+import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
+import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 
 public class ByteTypeConstructor implements TypeConstructor<Byte>
 {
@@ -50,11 +49,7 @@ public class ByteTypeConstructor implements 
TypeConstructor<Byte>
         }
         else
         {
-            Error error = new Error();
-            error.setCondition(ConnectionError.FRAMING_ERROR);
-            error.setDescription("Cannot construct byte: insufficient input 
data");
-            throw new AmqpErrorException(error);
-
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct byte: insufficient input data");
         }
 
     }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/CharTypeConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/CharTypeConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/CharTypeConstructor.java
index 6cce923..5f7a1ab 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/CharTypeConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/CharTypeConstructor.java
@@ -52,11 +52,7 @@ public class CharTypeConstructor implements 
TypeConstructor<String>
         }
         else
         {
-            org.apache.qpid.server.protocol.v1_0.type.transport.Error error = 
new org.apache.qpid.server.protocol.v1_0.type.transport.Error();
-            error.setCondition(ConnectionError.FRAMING_ERROR);
-            error.setDescription("Cannot construct char: insufficient input 
data");
-            throw new AmqpErrorException(error);
-
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct char: insufficient input data");
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/DecimalConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/DecimalConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/DecimalConstructor.java
index d46f4aa..d7ae43f 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/DecimalConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/DecimalConstructor.java
@@ -25,7 +25,7 @@ import java.util.List;
 import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
 import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
 import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
-import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
+import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 
 public abstract class DecimalConstructor implements TypeConstructor<BigDecimal>
 {
@@ -44,7 +44,7 @@ public abstract class DecimalConstructor implements 
TypeConstructor<BigDecimal>
             }
             else
             {
-                throw new AmqpErrorException(ConnectionError.FRAMING_ERROR, 
"Cannot construct decimal32: insufficient input data");
+                throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct decimal32: insufficient input data");
             }
 
             return constructFrom32(val);
@@ -67,7 +67,7 @@ public abstract class DecimalConstructor implements 
TypeConstructor<BigDecimal>
             }
             else
             {
-                throw new AmqpErrorException(ConnectionError.FRAMING_ERROR, 
"Cannot construct decimal64: insufficient input data");
+                throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct decimal64: insufficient input data");
             }
 
             return constructFrom64(val);
@@ -93,7 +93,7 @@ public abstract class DecimalConstructor implements 
TypeConstructor<BigDecimal>
             }
             else
             {
-                throw new AmqpErrorException(ConnectionError.FRAMING_ERROR, 
"Cannot construct decimal128: insufficient input data");
+                throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct decimal128: insufficient input data");
             }
 
             return constructFrom128(high, low);

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/DoubleTypeConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/DoubleTypeConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/DoubleTypeConstructor.java
index aba2d8c..aaaef75 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/DoubleTypeConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/DoubleTypeConstructor.java
@@ -22,11 +22,10 @@ package org.apache.qpid.server.protocol.v1_0.codec;
 
 import java.util.List;
 
+import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
 import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
 import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
-import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
-import org.apache.qpid.server.protocol.v1_0.type.transport.Error;
-import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 
 public class DoubleTypeConstructor implements TypeConstructor<Double>
 {
@@ -51,10 +50,7 @@ public class DoubleTypeConstructor implements 
TypeConstructor<Double>
         }
         else
         {
-            Error error = new Error();
-            error.setCondition(ConnectionError.FRAMING_ERROR);
-            error.setDescription("Cannot construct double: insufficient input 
data");
-            throw new AmqpErrorException(error);
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct double: insufficient input data");
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FloatTypeConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FloatTypeConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FloatTypeConstructor.java
index 66be0d3..9c8c88e 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FloatTypeConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/FloatTypeConstructor.java
@@ -22,11 +22,10 @@ package org.apache.qpid.server.protocol.v1_0.codec;
 
 import java.util.List;
 
-import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
-import org.apache.qpid.server.protocol.v1_0.type.*;
-import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
-import org.apache.qpid.server.protocol.v1_0.type.transport.Error;
 import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
+import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
+import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 
 public class FloatTypeConstructor implements TypeConstructor<Float>
 {
@@ -51,10 +50,7 @@ public class FloatTypeConstructor implements 
TypeConstructor<Float>
         }
         else
         {
-            org.apache.qpid.server.protocol.v1_0.type.transport.Error error = 
new Error();
-            error.setCondition(ConnectionError.FRAMING_ERROR);
-            error.setDescription("Cannot construct float: insufficient input 
data");
-            throw new AmqpErrorException(error);
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct float: insufficient input data");
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/IntTypeConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/IntTypeConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/IntTypeConstructor.java
index 69f3a25..8428e00 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/IntTypeConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/IntTypeConstructor.java
@@ -22,10 +22,10 @@ package org.apache.qpid.server.protocol.v1_0.codec;
 
 import java.util.List;
 
-import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
-import org.apache.qpid.server.protocol.v1_0.type.*;
-import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
 import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
+import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
+import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 
 public class IntTypeConstructor implements TypeConstructor<Integer>
 {
@@ -50,11 +50,7 @@ public class IntTypeConstructor implements 
TypeConstructor<Integer>
         }
         else
         {
-            org.apache.qpid.server.protocol.v1_0.type.transport.Error error = 
new org.apache.qpid.server.protocol.v1_0.type.transport.Error();
-            error.setCondition(ConnectionError.FRAMING_ERROR);
-            error.setDescription("Cannot construct int: insufficient input 
data");
-            throw new AmqpErrorException(error);
-
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct int: insufficient input data");
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ListConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ListConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ListConstructor.java
index 87011d2..9c9f169 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ListConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ListConstructor.java
@@ -41,7 +41,7 @@ public class ListConstructor extends 
VariableWidthTypeConstructor<List>
         int size;
         int count;
         long remaining = QpidByteBufferUtils.remaining(in);
-        if (remaining < getSize())
+        if (remaining < getSize() * 2)
         {
             throw new AmqpErrorException(AmqpError.DECODE_ERROR,
                                          String.format("Not sufficient data 
for deserialization of 'list'."

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/LongTypeConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/LongTypeConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/LongTypeConstructor.java
index 2b44607..70c8400 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/LongTypeConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/LongTypeConstructor.java
@@ -22,10 +22,10 @@ package org.apache.qpid.server.protocol.v1_0.codec;
 
 import java.util.List;
 
-import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
-import org.apache.qpid.server.protocol.v1_0.type.*;
-import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
 import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
+import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
+import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 
 public class LongTypeConstructor implements TypeConstructor<Long>
 {
@@ -50,11 +50,7 @@ public class LongTypeConstructor implements 
TypeConstructor<Long>
         }
         else
         {
-            org.apache.qpid.server.protocol.v1_0.type.transport.Error error = 
new org.apache.qpid.server.protocol.v1_0.type.transport.Error();
-            error.setCondition(ConnectionError.FRAMING_ERROR);
-            error.setDescription("Cannot construct long: insufficient input 
data");
-            throw new AmqpErrorException(error);
-
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct long: insufficient input data");
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/MapConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/MapConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/MapConstructor.java
index 4c791e8..e04480a 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/MapConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/MapConstructor.java
@@ -42,15 +42,16 @@ public class MapConstructor extends 
VariableWidthTypeConstructor<Map>
         return construct(in, handler, Object.class, Object.class);
     }
 
-    public <T,S> Map<T, S> construct(final List<QpidByteBuffer> in, final 
ValueHandler handler,
-                         Class<T> keyType,
-                         Class<S> valueType) throws AmqpErrorException
+    public <T, S> Map<T, S> construct(final List<QpidByteBuffer> in,
+                                      final ValueHandler handler,
+                                      Class<T> keyType,
+                                      Class<S> valueType) throws 
AmqpErrorException
     {
         int size;
         int count;
 
         long remaining = QpidByteBufferUtils.remaining(in);
-        if (remaining < getSize())
+        if (remaining < getSize() * 2)
         {
             throw new AmqpErrorException(AmqpError.DECODE_ERROR,
                                          String.format("Not sufficient data 
for deserialization of 'map'."
@@ -59,7 +60,7 @@ public class MapConstructor extends 
VariableWidthTypeConstructor<Map>
                                                        remaining));
         }
 
-        if(getSize() == 1)
+        if (getSize() == 1)
         {
             size = QpidByteBufferUtils.get(in) & 0xFF;
             count = QpidByteBufferUtils.get(in) & 0xFF;
@@ -83,12 +84,12 @@ public class MapConstructor extends 
VariableWidthTypeConstructor<Map>
     }
 
 
-    private <T, S> Map<T,S> construct(final List<QpidByteBuffer> in,
-                            final ValueHandler handler,
-                            final int size,
-                            final int count,
-                            Class<T> keyType,
-                            Class<S> valueType)
+    private <T, S> Map<T, S> construct(final List<QpidByteBuffer> in,
+                                       final ValueHandler handler,
+                                       final int size,
+                                       final int count,
+                                       Class<T> keyType,
+                                       Class<S> valueType)
             throws AmqpErrorException
     {
 
@@ -102,7 +103,7 @@ public class MapConstructor extends 
VariableWidthTypeConstructor<Map>
         Map<T, S> map = new LinkedHashMap<>(count);
 
         final int mapSize = count / 2;
-        for(int i = 0; i < mapSize; i++)
+        for (int i = 0; i < mapSize; i++)
         {
             Object key = handler.parse(in);
             if (key != null && !keyType.isAssignableFrom(key.getClass()))
@@ -123,7 +124,7 @@ public class MapConstructor extends 
VariableWidthTypeConstructor<Map>
             }
 
             Object oldValue;
-            if ((oldValue = map.put((T)key, (S)value)) != null)
+            if ((oldValue = map.put((T) key, (S) value)) != null)
             {
                 String message = String.format("Map cannot have duplicate 
keys: %s has values (%s, %s)",
                                                key,
@@ -131,7 +132,6 @@ public class MapConstructor extends 
VariableWidthTypeConstructor<Map>
                                                value);
                 throw new AmqpErrorException(AmqpError.DECODE_ERROR, message);
             }
-
         }
         return map;
     }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/NullTypeConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/NullTypeConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/NullTypeConstructor.java
index 6b49222..b0620ca 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/NullTypeConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/NullTypeConstructor.java
@@ -33,7 +33,7 @@ class NullTypeConstructor implements TypeConstructor<Void>
     }
 
     @Override
-    public Void construct(final List<QpidByteBuffer> in, final ValueHandler 
handler) throws AmqpErrorException
+    public Void construct(final List<QpidByteBuffer> in, final ValueHandler 
handler)
     {
         return null;
     }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ShortTypeConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ShortTypeConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ShortTypeConstructor.java
index 396911a..30e7efb 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ShortTypeConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ShortTypeConstructor.java
@@ -22,10 +22,10 @@ package org.apache.qpid.server.protocol.v1_0.codec;
 
 import java.util.List;
 
-import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
-import org.apache.qpid.server.protocol.v1_0.type.*;
-import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
 import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
+import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
+import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 
 public class ShortTypeConstructor implements TypeConstructor<Short>
 {
@@ -50,11 +50,7 @@ public class ShortTypeConstructor implements 
TypeConstructor<Short>
         }
         else
         {
-            org.apache.qpid.server.protocol.v1_0.type.transport.Error error = 
new org.apache.qpid.server.protocol.v1_0.type.transport.Error();
-            error.setCondition(ConnectionError.FRAMING_ERROR);
-            error.setDescription("Cannot construct short: insufficient input 
data");
-            throw new AmqpErrorException(error);
-
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct short: insufficient input data");
         }
 
     }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SmallIntConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SmallIntConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SmallIntConstructor.java
index 5098b34..41f462e 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SmallIntConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SmallIntConstructor.java
@@ -21,11 +21,10 @@ package org.apache.qpid.server.protocol.v1_0.codec;
 
 import java.util.List;
 
+import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
 import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
 import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
-import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
-import org.apache.qpid.server.protocol.v1_0.type.transport.Error;
-import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 
 public class SmallIntConstructor implements TypeConstructor<Integer>
 {
@@ -44,17 +43,14 @@ public class SmallIntConstructor implements 
TypeConstructor<Integer>
     @Override
     public Integer construct(final List<QpidByteBuffer> in, final ValueHandler 
handler) throws AmqpErrorException
     {
-        if(QpidByteBufferUtils.hasRemaining(in))
+        if (QpidByteBufferUtils.hasRemaining(in))
         {
             byte b = QpidByteBufferUtils.get(in);
             return (int) b;
         }
         else
         {
-            Error error = new Error();
-            error.setCondition(ConnectionError.FRAMING_ERROR);
-            error.setDescription("Cannot construct int: insufficient input 
data");
-            throw new AmqpErrorException(error);
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct int: insufficient input data");
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SmallLongConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SmallLongConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SmallLongConstructor.java
index 0bf79d7..44741e1 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SmallLongConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SmallLongConstructor.java
@@ -21,11 +21,10 @@ package org.apache.qpid.server.protocol.v1_0.codec;
 
 import java.util.List;
 
+import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
 import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
 import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
-import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
-import org.apache.qpid.server.protocol.v1_0.type.transport.Error;
-import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 
 public class SmallLongConstructor implements TypeConstructor<Long>
 {
@@ -44,17 +43,14 @@ public class SmallLongConstructor implements 
TypeConstructor<Long>
     @Override
     public Long construct(final List<QpidByteBuffer> in, final ValueHandler 
handler) throws AmqpErrorException
     {
-        if(QpidByteBufferUtils.hasRemaining(in))
+        if (QpidByteBufferUtils.hasRemaining(in))
         {
             byte b = QpidByteBufferUtils.get(in);
             return (long) b;
         }
         else
         {
-            Error error = new Error();
-            error.setCondition(ConnectionError.FRAMING_ERROR);
-            error.setDescription("Cannot construct long: insufficient input 
data");
-            throw new AmqpErrorException(error);
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct long: insufficient input data");
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SmallUIntConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SmallUIntConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SmallUIntConstructor.java
index 32df052..b080814 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SmallUIntConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SmallUIntConstructor.java
@@ -20,12 +20,11 @@ package org.apache.qpid.server.protocol.v1_0.codec;
 
 import java.util.List;
 
+import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
 import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
 import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
 import org.apache.qpid.server.protocol.v1_0.type.UnsignedInteger;
-import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
-import org.apache.qpid.server.protocol.v1_0.type.transport.Error;
-import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 
 public class SmallUIntConstructor implements TypeConstructor<UnsignedInteger>
 {
@@ -45,17 +44,14 @@ public class SmallUIntConstructor implements 
TypeConstructor<UnsignedInteger>
     public UnsignedInteger construct(final List<QpidByteBuffer> in, final 
ValueHandler handler)
             throws AmqpErrorException
     {
-        if(QpidByteBufferUtils.hasRemaining(in))
+        if (QpidByteBufferUtils.hasRemaining(in))
         {
             byte b = QpidByteBufferUtils.get(in);
             return UnsignedInteger.valueOf(((int) b) & 0xff);
         }
         else
         {
-            Error error = new Error();
-            error.setCondition(ConnectionError.FRAMING_ERROR);
-            error.setDescription("Cannot construct uint: insufficient input 
data");
-            throw new AmqpErrorException(error);
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct uint: insufficient input data");
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SmallULongConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SmallULongConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SmallULongConstructor.java
index 845f745..9e34ea9 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SmallULongConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SmallULongConstructor.java
@@ -21,12 +21,11 @@ package org.apache.qpid.server.protocol.v1_0.codec;
 
 import java.util.List;
 
+import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
 import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
 import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
 import org.apache.qpid.server.protocol.v1_0.type.UnsignedLong;
-import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
-import org.apache.qpid.server.protocol.v1_0.type.transport.Error;
-import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 
 public class SmallULongConstructor implements TypeConstructor<UnsignedLong>
 {
@@ -45,17 +44,14 @@ public class SmallULongConstructor implements 
TypeConstructor<UnsignedLong>
     @Override
     public UnsignedLong construct(final List<QpidByteBuffer> in, final 
ValueHandler handler) throws AmqpErrorException
     {
-        if(QpidByteBufferUtils.hasRemaining(in))
+        if (QpidByteBufferUtils.hasRemaining(in))
         {
             byte b = QpidByteBufferUtils.get(in);
             return UnsignedLong.valueOf(((long) b) & 0xffL);
         }
         else
         {
-            Error error = new Error();
-            error.setCondition(ConnectionError.FRAMING_ERROR);
-            error.setDescription("Cannot construct ulong: insufficient input 
data");
-            throw new AmqpErrorException(error);
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct ulong: insufficient input data");
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/StringTypeConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/StringTypeConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/StringTypeConstructor.java
index 3a93f29..b1e5b42 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/StringTypeConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/StringTypeConstructor.java
@@ -28,7 +28,7 @@ import java.util.List;
 import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
 import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
 import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
-import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
+import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 
 public class StringTypeConstructor extends VariableWidthTypeConstructor<String>
 {
@@ -52,7 +52,7 @@ public class StringTypeConstructor extends 
VariableWidthTypeConstructor<String>
         QpidByteBuffer dup = in.duplicate();
         try
         {
-            dup.limit(dup.position()+size);
+            dup.limit(dup.position() + size);
             CharBuffer charBuf = dup.decode(UTF_8);
 
             String str = charBuf.toString();
@@ -61,9 +61,14 @@ public class StringTypeConstructor extends 
VariableWidthTypeConstructor<String>
 
             return str;
         }
-        catch(IllegalArgumentException e)
+        catch (IllegalArgumentException e)
         {
-            throw new IllegalArgumentException("position: " + dup.position() + 
"size: " + size + " capacity: " + dup.capacity());
+            throw new IllegalArgumentException("position: "
+                                               + dup.position()
+                                               + "size: "
+                                               + size
+                                               + " capacity: "
+                                               + dup.capacity());
         }
         finally
         {
@@ -76,7 +81,12 @@ public class StringTypeConstructor extends 
VariableWidthTypeConstructor<String>
     {
         int size;
 
-        if(getSize() == 1)
+        if (!QpidByteBufferUtils.hasRemaining(in, getSize()))
+        {
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct string: insufficient input data");
+        }
+
+        if (getSize() == 1)
         {
             size = QpidByteBufferUtils.get(in) & 0xFF;
         }
@@ -85,20 +95,17 @@ public class StringTypeConstructor extends 
VariableWidthTypeConstructor<String>
             size = QpidByteBufferUtils.getInt(in);
         }
 
-        if(!QpidByteBufferUtils.hasRemaining(in, size))
+        if (!QpidByteBufferUtils.hasRemaining(in, size))
         {
-            org.apache.qpid.server.protocol.v1_0.type.transport.Error error = 
new org.apache.qpid.server.protocol.v1_0.type.transport.Error();
-            error.setCondition(ConnectionError.FRAMING_ERROR);
-            error.setDescription("Cannot construct string: insufficient input 
data");
-            throw new AmqpErrorException(error);
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct string: insufficient input data");
         }
 
-        for(int i = 0; i<in.size(); i++)
+        for (int i = 0; i < in.size(); i++)
         {
             QpidByteBuffer buf = in.get(i);
-            if(buf.hasRemaining())
+            if (buf.hasRemaining())
             {
-                if(buf.remaining() >= size)
+                if (buf.remaining() >= size)
                 {
                     return constructFromSingleBuffer(buf, size);
                 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SymbolTypeConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SymbolTypeConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SymbolTypeConstructor.java
index c58a52f..09f467f 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SymbolTypeConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/SymbolTypeConstructor.java
@@ -26,11 +26,11 @@ import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
+import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
 import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
 import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
 import org.apache.qpid.server.protocol.v1_0.type.Symbol;
-import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
-import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
+import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 
 public class SymbolTypeConstructor extends VariableWidthTypeConstructor<Symbol>
 {
@@ -55,7 +55,7 @@ public class SymbolTypeConstructor extends 
VariableWidthTypeConstructor<Symbol>
         BinaryString binaryStr;
         if (in.hasArray())
         {
-            binaryStr = new BinaryString(in.array(), 
in.arrayOffset()+in.position(), size);
+            binaryStr = new BinaryString(in.array(), in.arrayOffset() + 
in.position(), size);
         }
         else
         {
@@ -67,10 +67,10 @@ public class SymbolTypeConstructor extends 
VariableWidthTypeConstructor<Symbol>
         }
 
         Symbol symbolVal = SYMBOL_MAP.get(binaryStr);
-        if(symbolVal == null)
+        if (symbolVal == null)
         {
             QpidByteBuffer dup = in.duplicate();
-            dup.limit(in.position()+size);
+            dup.limit(in.position() + size);
             CharBuffer charBuf = dup.decode(ASCII);
             dup.dispose();
 
@@ -83,7 +83,7 @@ public class SymbolTypeConstructor extends 
VariableWidthTypeConstructor<Symbol>
         }
         else
         {
-            in.position(in.position()+size);
+            in.position(in.position() + size);
         }
 
         return symbolVal;
@@ -95,7 +95,12 @@ public class SymbolTypeConstructor extends 
VariableWidthTypeConstructor<Symbol>
 
         int size;
 
-        if(getSize() == 1)
+        if (!QpidByteBufferUtils.hasRemaining(in, getSize()))
+        {
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct symbol: insufficient input data");
+        }
+
+        if (getSize() == 1)
         {
             size = QpidByteBufferUtils.get(in) & 0xFF;
         }
@@ -104,20 +109,17 @@ public class SymbolTypeConstructor extends 
VariableWidthTypeConstructor<Symbol>
             size = QpidByteBufferUtils.getInt(in);
         }
 
-        if(!QpidByteBufferUtils.hasRemaining(in, size))
+        if (!QpidByteBufferUtils.hasRemaining(in, size))
         {
-            org.apache.qpid.server.protocol.v1_0.type.transport.Error error = 
new org.apache.qpid.server.protocol.v1_0.type.transport.Error();
-            error.setCondition(ConnectionError.FRAMING_ERROR);
-            error.setDescription("Cannot construct symbol: insufficient input 
data");
-            throw new AmqpErrorException(error);
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct symbol: insufficient input data");
         }
 
-        for(int i = 0; i<in.size(); i++)
+        for (int i = 0; i < in.size(); i++)
         {
             QpidByteBuffer buf = in.get(i);
-            if(buf.hasRemaining())
+            if (buf.hasRemaining())
             {
-                if(buf.remaining() >= size)
+                if (buf.remaining() >= size)
                 {
                     return constructFromSingleBuffer(buf, size);
                 }
@@ -130,7 +132,7 @@ public class SymbolTypeConstructor extends 
VariableWidthTypeConstructor<Symbol>
         final BinaryString binaryStr = new BinaryString(data);
 
         Symbol symbolVal = SYMBOL_MAP.get(binaryStr);
-        if(symbolVal == null)
+        if (symbolVal == null)
         {
             symbolVal = Symbol.valueOf(new String(data, ASCII));
             SYMBOL_MAP.putIfAbsent(binaryStr, symbolVal);

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/TimestampTypeConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/TimestampTypeConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/TimestampTypeConstructor.java
index a76ae6f..eae7282 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/TimestampTypeConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/TimestampTypeConstructor.java
@@ -26,7 +26,7 @@ import java.util.List;
 import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
 import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
 import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
-import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
+import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 
 public class TimestampTypeConstructor implements TypeConstructor<Date>
 {
@@ -52,11 +52,7 @@ public class TimestampTypeConstructor implements 
TypeConstructor<Date>
         }
         else
         {
-            org.apache.qpid.server.protocol.v1_0.type.transport.Error error = 
new org.apache.qpid.server.protocol.v1_0.type.transport.Error();
-            error.setCondition(ConnectionError.FRAMING_ERROR);
-            error.setDescription("Cannot construct timestamp: insufficient 
input data");
-            throw new AmqpErrorException(error);
-
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct timestamp: insufficient input data");
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UByteTypeConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UByteTypeConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UByteTypeConstructor.java
index d03668c..e9a2bc5 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UByteTypeConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UByteTypeConstructor.java
@@ -22,11 +22,11 @@ package org.apache.qpid.server.protocol.v1_0.codec;
 
 import java.util.List;
 
-import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
-import org.apache.qpid.server.protocol.v1_0.type.*;
-import org.apache.qpid.server.protocol.v1_0.type.transport.Error;
-import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
 import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
+import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
+import org.apache.qpid.server.protocol.v1_0.type.UnsignedByte;
+import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 
 public class UByteTypeConstructor implements TypeConstructor<UnsignedByte>
 {
@@ -52,10 +52,7 @@ public class UByteTypeConstructor implements 
TypeConstructor<UnsignedByte>
         }
         else
         {
-            Error error = new Error();
-            error.setCondition(ConnectionError.FRAMING_ERROR);
-            error.setDescription("Cannot construct ubyte: insufficient input 
data");
-            throw new AmqpErrorException(error);
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct ubyte: insufficient input data");
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UIntTypeConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UIntTypeConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UIntTypeConstructor.java
index 700817d..f8d4c21 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UIntTypeConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UIntTypeConstructor.java
@@ -22,10 +22,11 @@ package org.apache.qpid.server.protocol.v1_0.codec;
 
 import java.util.List;
 
-import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
-import org.apache.qpid.server.protocol.v1_0.type.*;
-import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
 import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
+import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
+import org.apache.qpid.server.protocol.v1_0.type.UnsignedInteger;
+import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 
 public class UIntTypeConstructor implements TypeConstructor<UnsignedInteger>
 {
@@ -52,11 +53,7 @@ public class UIntTypeConstructor implements 
TypeConstructor<UnsignedInteger>
         }
         else
         {
-            org.apache.qpid.server.protocol.v1_0.type.transport.Error error = 
new org.apache.qpid.server.protocol.v1_0.type.transport.Error();
-            error.setCondition(ConnectionError.FRAMING_ERROR);
-            error.setDescription("Cannot construct uint: insufficient input 
data");
-            throw new AmqpErrorException(error);
-
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct uint: insufficient input data");
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ULongTypeConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ULongTypeConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ULongTypeConstructor.java
index dbd606f..5a71935 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ULongTypeConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ULongTypeConstructor.java
@@ -22,10 +22,11 @@ package org.apache.qpid.server.protocol.v1_0.codec;
 
 import java.util.List;
 
-import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
-import org.apache.qpid.server.protocol.v1_0.type.*;
-import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
 import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
+import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
+import org.apache.qpid.server.protocol.v1_0.type.UnsignedLong;
+import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 
 public class ULongTypeConstructor implements TypeConstructor<UnsignedLong>
 {
@@ -53,11 +54,7 @@ public class ULongTypeConstructor implements 
TypeConstructor<UnsignedLong>
         }
         else
         {
-            org.apache.qpid.server.protocol.v1_0.type.transport.Error error = 
new org.apache.qpid.server.protocol.v1_0.type.transport.Error();
-            error.setCondition(ConnectionError.FRAMING_ERROR);
-            error.setDescription("Cannot construct ulong: insufficient input 
data");
-            throw new AmqpErrorException(error);
-
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct ulong: insufficient input data");
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UShortTypeConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UShortTypeConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UShortTypeConstructor.java
index b22790b..8174d5b 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UShortTypeConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UShortTypeConstructor.java
@@ -22,11 +22,11 @@ package org.apache.qpid.server.protocol.v1_0.codec;
 
 import java.util.List;
 
-import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
-import org.apache.qpid.server.protocol.v1_0.type.*;
-import org.apache.qpid.server.protocol.v1_0.type.transport.Error;
-import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
 import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
+import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
+import org.apache.qpid.server.protocol.v1_0.type.UnsignedShort;
+import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 
 public class UShortTypeConstructor implements TypeConstructor<UnsignedShort>
 {
@@ -52,11 +52,7 @@ public class UShortTypeConstructor implements 
TypeConstructor<UnsignedShort>
         }
         else
         {
-            org.apache.qpid.server.protocol.v1_0.type.transport.Error error = 
new Error();
-            error.setCondition(ConnectionError.FRAMING_ERROR);
-            error.setDescription("Cannot construct ushort: insufficient input 
data");
-            throw new AmqpErrorException(error);
-
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct ushort: insufficient input data");
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UUIDTypeConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UUIDTypeConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UUIDTypeConstructor.java
index 4bff5c0..ce247fd 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UUIDTypeConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/UUIDTypeConstructor.java
@@ -26,8 +26,7 @@ import java.util.UUID;
 import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
 import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
 import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
-import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
-import org.apache.qpid.server.protocol.v1_0.type.transport.Error;
+import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 
 public class UUIDTypeConstructor implements TypeConstructor<UUID>
 {
@@ -54,11 +53,7 @@ public class UUIDTypeConstructor implements 
TypeConstructor<UUID>
         }
         else
         {
-            org.apache.qpid.server.protocol.v1_0.type.transport.Error error = 
new Error();
-            error.setCondition(ConnectionError.FRAMING_ERROR);
-            error.setDescription("Cannot construct UUID: insufficient input 
data");
-            throw new AmqpErrorException(error);
-
+            throw new AmqpErrorException(AmqpError.DECODE_ERROR, "Cannot 
construct UUID: insufficient input data");
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ValueHandler.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ValueHandler.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ValueHandler.java
index 56347f6..b7959e1 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ValueHandler.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ValueHandler.java
@@ -32,7 +32,7 @@ import 
org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
 
 public class ValueHandler implements DescribedTypeConstructorRegistry.Source
 {
-    private static final byte DESCRIBED_TYPE = (byte)0;
+    public static final byte DESCRIBED_TYPE = (byte)0;
 
     private final DescribedTypeConstructorRegistry 
_describedTypeConstructorRegistry;
 
@@ -91,6 +91,7 @@ public class ValueHandler implements 
DescribedTypeConstructorRegistry.Source
     {
         return parse(new ArrayList<>(Arrays.asList(in)));
     }
+
     public Object parse(final List<QpidByteBuffer> in) throws 
AmqpErrorException
     {
         TypeConstructor constructor = readConstructor(in);

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ZeroListConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ZeroListConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ZeroListConstructor.java
index ae62241..4916538 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ZeroListConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ZeroListConstructor.java
@@ -34,7 +34,7 @@ class ZeroListConstructor implements TypeConstructor<List>
     }
 
     @Override
-    public List construct(final List<QpidByteBuffer> in, final ValueHandler 
handler) throws AmqpErrorException
+    public List construct(final List<QpidByteBuffer> in, final ValueHandler 
handler)
     {
         return Collections.EMPTY_LIST;
     }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ZeroUIntConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ZeroUIntConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ZeroUIntConstructor.java
index 054ce8d..b83bf12 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ZeroUIntConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ZeroUIntConstructor.java
@@ -35,7 +35,6 @@ class ZeroUIntConstructor implements 
TypeConstructor<UnsignedInteger>
 
     @Override
     public UnsignedInteger construct(final List<QpidByteBuffer> in, final 
ValueHandler handler)
-            throws AmqpErrorException
     {
         return UnsignedInteger.ZERO;
     }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ZeroULongConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ZeroULongConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ZeroULongConstructor.java
index 521da99..cdd086c 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ZeroULongConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/codec/ZeroULongConstructor.java
@@ -34,7 +34,7 @@ class ZeroULongConstructor implements 
TypeConstructor<UnsignedLong>
     }
 
     @Override
-    public UnsignedLong construct(final List<QpidByteBuffer> in, final 
ValueHandler handler) throws AmqpErrorException
+    public UnsignedLong construct(final List<QpidByteBuffer> in, final 
ValueHandler handler)
     {
         return UnsignedLong.ZERO;
     }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/framing/FrameHandler.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/framing/FrameHandler.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/framing/FrameHandler.java
index baebf51..523aec1 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/framing/FrameHandler.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/framing/FrameHandler.java
@@ -34,6 +34,7 @@ import 
org.apache.qpid.server.protocol.v1_0.codec.ProtocolHandler;
 import org.apache.qpid.server.protocol.v1_0.codec.ValueHandler;
 import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
 import org.apache.qpid.server.protocol.v1_0.type.ErrorCondition;
+import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 import org.apache.qpid.server.protocol.v1_0.type.transport.ChannelFrameBody;
 import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
 import org.apache.qpid.server.protocol.v1_0.type.transport.Error;
@@ -213,7 +214,7 @@ public class FrameHandler implements ProtocolHandler
             }
             LOGGER.warn("Unexpected exception handling frame", e);
             // This exception is unexpected. The up layer should handle error 
condition gracefully
-            
_connectionHandler.handleError(this.createError(ConnectionError.CONNECTION_FORCED,
 e.toString()));
+            
_connectionHandler.handleError(this.createError(AmqpError.INTERNAL_ERROR, 
e.toString()));
         }
         return this;
     }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/messaging/SectionDecoder.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/messaging/SectionDecoder.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/messaging/SectionDecoder.java
index d50162d..34d97e4 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/messaging/SectionDecoder.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/messaging/SectionDecoder.java
@@ -28,8 +28,5 @@ import 
org.apache.qpid.server.protocol.v1_0.type.messaging.EncodingRetainingSect
 
 public interface SectionDecoder
 {
-
     List<EncodingRetainingSection<?>> parseAll(List<QpidByteBuffer> buf) 
throws AmqpErrorException;
-
-    EncodingRetainingSection<?> readSection(List<QpidByteBuffer> buf) throws 
AmqpErrorException;
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/messaging/SectionDecoderImpl.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/messaging/SectionDecoderImpl.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/messaging/SectionDecoderImpl.java
index 7b9f742..8c327eb 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/messaging/SectionDecoderImpl.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/messaging/SectionDecoderImpl.java
@@ -65,12 +65,4 @@ public class SectionDecoderImpl implements SectionDecoder
 
         return obj;
     }
-
-
-    @Override
-    public EncodingRetainingSection<?> readSection(List<QpidByteBuffer> buf) 
throws AmqpErrorException
-    {
-        return (EncodingRetainingSection<?>) _valueHandler.parse(buf);
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AbstractSection.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AbstractSection.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AbstractSection.java
index ce284f1..c6a7be9 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AbstractSection.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/AbstractSection.java
@@ -32,6 +32,7 @@ import 
org.apache.qpid.server.protocol.v1_0.messaging.SectionEncoder;
 import org.apache.qpid.server.protocol.v1_0.messaging.SectionEncoderImpl;
 import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
 import 
org.apache.qpid.server.protocol.v1_0.type.codec.AMQPDescribedTypeRegistry;
+import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 import org.apache.qpid.server.util.ConnectionScopedRuntimeException;
 
 public abstract class AbstractSection<T, S extends 
NonEncodingRetainingSection<T>> implements EncodingRetainingSection<T>
@@ -178,6 +179,12 @@ public abstract class AbstractSection<T, S extends 
NonEncodingRetainingSection<T
             originalPositions[i] = input.get(i).position();
         }
         int describedByte = QpidByteBufferUtils.get(input);
+        if (describedByte != ValueHandler.DESCRIBED_TYPE)
+        {
+            throw new ConnectionScopedRuntimeException("Cannot decode section",
+                                                       new 
AmqpErrorException(AmqpError.DECODE_ERROR,
+                                                                              
"Not a described type."));
+        }
         ValueHandler handler = new ValueHandler(TYPE_REGISTRY);
         try
         {

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/2402b637/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/AmqpValueSectionConstructor.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/AmqpValueSectionConstructor.java
 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/AmqpValueSectionConstructor.java
index 274a2aa..1af86b8 100644
--- 
a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/AmqpValueSectionConstructor.java
+++ 
b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/type/messaging/codec/AmqpValueSectionConstructor.java
@@ -26,15 +26,16 @@ package 
org.apache.qpid.server.protocol.v1_0.type.messaging.codec;
 import java.util.List;
 
 import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
 import org.apache.qpid.server.protocol.v1_0.codec.DescribedTypeConstructor;
 import 
org.apache.qpid.server.protocol.v1_0.codec.DescribedTypeConstructorRegistry;
-import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
 import org.apache.qpid.server.protocol.v1_0.codec.TypeConstructor;
 import org.apache.qpid.server.protocol.v1_0.codec.ValueHandler;
 import org.apache.qpid.server.protocol.v1_0.type.AmqpErrorException;
 import org.apache.qpid.server.protocol.v1_0.type.Symbol;
 import org.apache.qpid.server.protocol.v1_0.type.UnsignedLong;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.AmqpValueSection;
+import org.apache.qpid.server.protocol.v1_0.type.transport.AmqpError;
 import org.apache.qpid.server.protocol.v1_0.type.transport.ConnectionError;
 
 public class AmqpValueSectionConstructor implements 
DescribedTypeConstructor<AmqpValueSection>
@@ -83,9 +84,13 @@ public class AmqpValueSectionConstructor implements 
DescribedTypeConstructor<Amq
         @Override
         protected void skipValue(final List<QpidByteBuffer> in) throws 
AmqpErrorException
         {
+            if (!QpidByteBufferUtils.hasRemaining(in))
+            {
+                throw new AmqpErrorException(AmqpError.DECODE_ERROR, 
"Insufficient data to decode AMQP value section.");
+            }
             byte formatCode = QpidByteBufferUtils.get(in);
 
-            if (formatCode == 0)
+            if (formatCode == ValueHandler.DESCRIBED_TYPE)
             {
                 // This is only valid if the described value is not an array
                 skipValue(in);
@@ -93,39 +98,57 @@ public class AmqpValueSectionConstructor implements 
DescribedTypeConstructor<Amq
             }
             else
             {
+                final int skipLength;
                 int category = (formatCode >> 4) & 0x0F;
                 switch (category)
                 {
                     case 0x04:
+                        skipLength = 0;
                         break;
                     case 0x05:
-                        QpidByteBufferUtils.skip(in, 1);
+                        skipLength = 1;
                         break;
                     case 0x06:
-                        QpidByteBufferUtils.skip(in, 2);
+                        skipLength = 2;
                         break;
                     case 0x07:
-                        QpidByteBufferUtils.skip(in, 4);
+                        skipLength = 4;
                         break;
                     case 0x08:
-                        QpidByteBufferUtils.skip(in, 8);
+                        skipLength = 8;
                         break;
                     case 0x09:
-                        QpidByteBufferUtils.skip(in, 16);
+                        skipLength = 16;
                         break;
                     case 0x0a:
                     case 0x0c:
                     case 0x0e:
-                        QpidByteBufferUtils.skip(in, ((int) 
QpidByteBufferUtils.get(in)) & 0xFF);
+                        if (!QpidByteBufferUtils.hasRemaining(in))
+                        {
+                            throw new 
AmqpErrorException(AmqpError.DECODE_ERROR,
+                                                         "Insufficient data to 
decode AMQP value section.");
+                        }
+                        skipLength = ((int) QpidByteBufferUtils.get(in)) & 
0xFF;
                         break;
                     case 0x0b:
                     case 0x0d:
                     case 0x0f:
-                        QpidByteBufferUtils.skip(in, 
QpidByteBufferUtils.getInt(in));
+                        if (!QpidByteBufferUtils.hasRemaining(in, 4))
+                        {
+                            throw new 
AmqpErrorException(AmqpError.DECODE_ERROR,
+                                                         "Insufficient data to 
decode AMQP value section.");
+                        }
+                        skipLength = QpidByteBufferUtils.getInt(in);
                         break;
                     default:
-                        throw new 
AmqpErrorException(ConnectionError.FRAMING_ERROR, "Unknown type");
+                        throw new AmqpErrorException(AmqpError.DECODE_ERROR, 
"Unknown type");
+                }
+                if (!QpidByteBufferUtils.hasRemaining(in, skipLength))
+                {
+                    throw new AmqpErrorException(AmqpError.DECODE_ERROR,
+                                                 "Insufficient data to decode 
AMQP value section.");
                 }
+                QpidByteBufferUtils.skip(in,skipLength);
             }
         }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to