This is an automated email from the ASF dual-hosted git repository.

tabish pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-protonj2.git


The following commit(s) were added to refs/heads/main by this push:
     new dc9bf077 PROTON-2869 Fix smallint decoding of negative values
dc9bf077 is described below

commit dc9bf077806b6420ddf9774e98bdbd906c6ee403
Author: Timothy Bish <tabish...@gmail.com>
AuthorDate: Thu Feb 13 14:24:27 2025 -0500

    PROTON-2869 Fix smallint decoding of negative values
    
    Fix decodng handlers and add tests for negative small int values
---
 .../protonj2/codec/decoders/ProtonDecoder.java     |  4 ++--
 .../decoders/primitives/Integer8TypeDecoder.java   |  2 +-
 .../codec/primitives/IntegerTypeCodecTest.java     | 25 +++++++++++++++++-----
 3 files changed, 23 insertions(+), 8 deletions(-)

diff --git 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/ProtonDecoder.java
 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/ProtonDecoder.java
index bb30aba7..912b3247 100644
--- 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/ProtonDecoder.java
+++ 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/ProtonDecoder.java
@@ -535,7 +535,7 @@ public final class ProtonDecoder implements Decoder {
 
         switch (encodingCode) {
             case EncodingCodes.SMALLINT:
-                return buffer.readByte() & 0xff;
+                return (int) buffer.readByte();
             case EncodingCodes.INT:
                 return buffer.readInt();
             case EncodingCodes.NULL:
@@ -551,7 +551,7 @@ public final class ProtonDecoder implements Decoder {
 
         switch (encodingCode) {
             case EncodingCodes.SMALLINT:
-                return buffer.readByte() & 0xff;
+                return buffer.readByte();
             case EncodingCodes.INT:
                 return buffer.readInt();
             case EncodingCodes.NULL:
diff --git 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/primitives/Integer8TypeDecoder.java
 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/primitives/Integer8TypeDecoder.java
index 274fad22..d92e8133 100644
--- 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/primitives/Integer8TypeDecoder.java
+++ 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/primitives/Integer8TypeDecoder.java
@@ -80,7 +80,7 @@ public final class Integer8TypeDecoder extends 
AbstractPrimitiveTypeDecoder<Inte
 
     @Override
     public Integer readValue(ProtonBuffer buffer, DecoderState state) throws 
DecodeException {
-        return buffer.readByte() & 0xff;
+        return Integer.valueOf(buffer.readByte());
     }
 
     @Override
diff --git 
a/protonj2/src/test/java/org/apache/qpid/protonj2/codec/primitives/IntegerTypeCodecTest.java
 
b/protonj2/src/test/java/org/apache/qpid/protonj2/codec/primitives/IntegerTypeCodecTest.java
index 68f93be8..2836e14d 100644
--- 
a/protonj2/src/test/java/org/apache/qpid/protonj2/codec/primitives/IntegerTypeCodecTest.java
+++ 
b/protonj2/src/test/java/org/apache/qpid/protonj2/codec/primitives/IntegerTypeCodecTest.java
@@ -91,12 +91,15 @@ public class IntegerTypeCodecTest extends CodecTestSupport {
         buffer.writeInt(44);
         buffer.writeByte(EncodingCodes.SMALLINT);
         buffer.writeByte((byte) 43);
+        buffer.writeByte(EncodingCodes.SMALLINT);
+        buffer.writeByte((byte) -2);
         buffer.writeByte(EncodingCodes.NULL);
         buffer.writeByte(EncodingCodes.NULL);
 
         assertEquals(42, decoder.readInteger(buffer, decoderState).intValue());
         assertEquals(44, decoder.readInteger(buffer, decoderState, 42));
         assertEquals(43, decoder.readInteger(buffer, decoderState, 42));
+        assertEquals(-2, decoder.readInteger(buffer, decoderState, 42));
         assertNull(decoder.readInteger(buffer, decoderState));
         assertEquals(42, decoder.readInteger(buffer, decoderState, 42));
     }
@@ -111,6 +114,8 @@ public class IntegerTypeCodecTest extends CodecTestSupport {
         buffer.writeInt(44);
         buffer.writeByte(EncodingCodes.SMALLINT);
         buffer.writeByte((byte) 43);
+        buffer.writeByte(EncodingCodes.SMALLINT);
+        buffer.writeByte((byte) -43);
         buffer.writeByte(EncodingCodes.NULL);
         buffer.writeByte(EncodingCodes.NULL);
 
@@ -119,6 +124,7 @@ public class IntegerTypeCodecTest extends CodecTestSupport {
         assertEquals(42, streamDecoder.readInteger(stream, 
streamDecoderState).intValue());
         assertEquals(44, streamDecoder.readInteger(stream, streamDecoderState, 
42));
         assertEquals(43, streamDecoder.readInteger(stream, streamDecoderState, 
42));
+        assertEquals(-43, streamDecoder.readInteger(stream, 
streamDecoderState, 42));
         assertNull(streamDecoder.readInteger(stream, streamDecoderState));
         assertEquals(42, streamDecoder.readInteger(stream, streamDecoderState, 
42));
     }
@@ -152,8 +158,11 @@ public class IntegerTypeCodecTest extends CodecTestSupport 
{
 
         buffer.writeByte(EncodingCodes.SMALLINT);
         buffer.writeByte((byte) 42);
+        buffer.writeByte(EncodingCodes.SMALLINT);
+        buffer.writeByte((byte) -1);
 
         assertEquals(42, decoder.readInteger(buffer, decoderState).intValue());
+        assertEquals(-1, decoder.readInteger(buffer, decoderState).intValue());
     }
 
     @Test
@@ -174,10 +183,13 @@ public class IntegerTypeCodecTest extends 
CodecTestSupport {
 
         buffer.writeByte(EncodingCodes.SMALLINT);
         buffer.writeByte((byte) 42);
+        buffer.writeByte(EncodingCodes.SMALLINT);
+        buffer.writeByte((byte) -1);
 
         InputStream stream = new ProtonBufferInputStream(buffer);
 
         assertEquals(42, streamDecoder.readInteger(stream, 
streamDecoderState).intValue());
+        assertEquals(-1, streamDecoder.readInteger(stream, 
streamDecoderState).intValue());
     }
 
     @Test
@@ -341,18 +353,20 @@ public class IntegerTypeCodecTest extends 
CodecTestSupport {
 
         if (encoding == EncodingCodes.INT) {
             buffer.writeByte(EncodingCodes.ARRAY32);
-            buffer.writeInt(17);  // Size
-            buffer.writeInt(2);   // Count
+            buffer.writeInt(21);  // Size
+            buffer.writeInt(3);   // Count
             buffer.writeByte(EncodingCodes.INT);
             buffer.writeInt(1);   // [0]
             buffer.writeInt(2);   // [1]
+            buffer.writeInt(-1);  // [2]
         } else if (encoding == EncodingCodes.SMALLINT) {
             buffer.writeByte(EncodingCodes.ARRAY32);
-            buffer.writeInt(11);  // Size
-            buffer.writeInt(2);   // Count
+            buffer.writeInt(12);  // Size
+            buffer.writeInt(3);   // Count
             buffer.writeByte(EncodingCodes.SMALLINT);
             buffer.writeByte((byte) 1);   // [0]
             buffer.writeByte((byte) 2);   // [1]
+            buffer.writeByte((byte) -1);  // [2]
         }
 
         final Object result;
@@ -369,9 +383,10 @@ public class IntegerTypeCodecTest extends CodecTestSupport 
{
 
         int[] array = (int[]) result;
 
-        assertEquals(2, array.length);
+        assertEquals(3, array.length);
         assertEquals(1, array[0]);
         assertEquals(2, array[1]);
+        assertEquals(-1, array[2]);
     }
 
     @Test


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

Reply via email to