fix for: https://issues.apache.org/jira/browse/AMQCPP-359

git-svn-id: https://svn.apache.org/repos/asf/activemq/activemq-cpp/branches/activemq-cpp-3.2.x@1087351 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/activemq-cpp/src/main/activemq/commands/ActiveMQBytesMessage.cpp b/activemq-cpp/src/main/activemq/commands/ActiveMQBytesMessage.cpp
index 68a5df1..370f8b8 100644
--- a/activemq-cpp/src/main/activemq/commands/ActiveMQBytesMessage.cpp
+++ b/activemq-cpp/src/main/activemq/commands/ActiveMQBytesMessage.cpp
@@ -33,6 +33,7 @@
 using namespace activemq::exceptions;
 using namespace decaf::io;
 using namespace decaf::lang;
+using namespace decaf::lang::exceptions;
 using namespace decaf::util;
 using namespace decaf::util::zip;
 
@@ -307,6 +308,10 @@
     initializeReading();
     try{
 
+        if( length < 0 ) {
+            throw IndexOutOfBoundsException(__FILE__, __LINE__, "Array length given was negative");
+        }
+
         int n = 0;
 
         while( n < length ) {
diff --git a/activemq-cpp/src/test/activemq/commands/ActiveMQBytesMessageTest.cpp b/activemq-cpp/src/test/activemq/commands/ActiveMQBytesMessageTest.cpp
index b7f229d..84b68fa 100644
--- a/activemq-cpp/src/test/activemq/commands/ActiveMQBytesMessageTest.cpp
+++ b/activemq-cpp/src/test/activemq/commands/ActiveMQBytesMessageTest.cpp
@@ -212,6 +212,12 @@
         for( int i = 0; i < 50; i++ ) {
             CPPUNIT_ASSERT( test[i] == i );
         }
+
+        CPPUNIT_ASSERT_THROW_MESSAGE(
+            "Should have thrown a CMSException",
+            msg.readBytes( test, -1 ),
+            CMSException);
+
     } catch( CMSException& ex ) {
         ex.printStackTrace();
         CPPUNIT_ASSERT( false );