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 ca26da4b PROTON-2869 Fix smalllong decoding
ca26da4b is described below

commit ca26da4b18913bf2825cacc097d0cb0c25bc77ec
Author: Arnaud Cogoluègnes <acogolueg...@tuta.io>
AuthorDate: Tue Feb 11 17:30:53 2025 +0100

    PROTON-2869 Fix smalllong decoding
---
 .../qpid/protonj2/codec/decoders/ProtonDecoder.java      |  4 ++--
 .../protonj2/codec/decoders/ProtonStreamDecoder.java     |  4 ++--
 .../codec/decoders/primitives/Long8TypeDecoder.java      |  2 +-
 .../protonj2/codec/primitives/LongTypeCodecTest.java     | 16 ++++++++++------
 4 files changed, 15 insertions(+), 11 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 f9b2b447..bb30aba7 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
@@ -621,7 +621,7 @@ public final class ProtonDecoder implements Decoder {
 
         switch (encodingCode) {
             case EncodingCodes.SMALLLONG:
-                return (long) buffer.readByte() & 0xff;
+                return (long) buffer.readByte();
             case EncodingCodes.LONG:
                 return buffer.readLong();
             case EncodingCodes.NULL:
@@ -637,7 +637,7 @@ public final class ProtonDecoder implements Decoder {
 
         switch (encodingCode) {
             case EncodingCodes.SMALLLONG:
-                return (long) buffer.readByte() & 0xff;
+                return buffer.readByte();
             case EncodingCodes.LONG:
                 return buffer.readLong();
             case EncodingCodes.NULL:
diff --git 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/ProtonStreamDecoder.java
 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/ProtonStreamDecoder.java
index 32b26ed2..8e595aec 100644
--- 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/ProtonStreamDecoder.java
+++ 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/ProtonStreamDecoder.java
@@ -645,7 +645,7 @@ public final class ProtonStreamDecoder implements 
StreamDecoder {
 
         switch (encodingCode) {
             case EncodingCodes.SMALLLONG:
-                return Long.valueOf(ProtonStreamUtils.readByte(stream) & 
0xffl);
+                return (long) ProtonStreamUtils.readByte(stream);
             case EncodingCodes.LONG:
                 return ProtonStreamUtils.readLong(stream);
             case EncodingCodes.NULL:
@@ -661,7 +661,7 @@ public final class ProtonStreamDecoder implements 
StreamDecoder {
 
         switch (encodingCode) {
             case EncodingCodes.SMALLLONG:
-                return ProtonStreamUtils.readByte(stream) & 0xffl;
+                return ProtonStreamUtils.readByte(stream);
             case EncodingCodes.LONG:
                 return ProtonStreamUtils.readLong(stream);
             case EncodingCodes.NULL:
diff --git 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/primitives/Long8TypeDecoder.java
 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/primitives/Long8TypeDecoder.java
index a2fdd82b..eb402d51 100644
--- 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/primitives/Long8TypeDecoder.java
+++ 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/decoders/primitives/Long8TypeDecoder.java
@@ -32,7 +32,7 @@ public final class Long8TypeDecoder extends LongTypeDecoder {
 
     @Override
     public Long readValue(ProtonBuffer buffer, DecoderState state) throws 
DecodeException {
-        return (long) buffer.readByte() & 0xff;
+        return (long) buffer.readByte();
     }
 
     @Override
diff --git 
a/protonj2/src/test/java/org/apache/qpid/protonj2/codec/primitives/LongTypeCodecTest.java
 
b/protonj2/src/test/java/org/apache/qpid/protonj2/codec/primitives/LongTypeCodecTest.java
index 678bd211..e59abc2d 100644
--- 
a/protonj2/src/test/java/org/apache/qpid/protonj2/codec/primitives/LongTypeCodecTest.java
+++ 
b/protonj2/src/test/java/org/apache/qpid/protonj2/codec/primitives/LongTypeCodecTest.java
@@ -113,6 +113,8 @@ public class LongTypeCodecTest extends CodecTestSupport {
         buffer.writeLong(44);
         buffer.writeByte(EncodingCodes.SMALLLONG);
         buffer.writeByte((byte) 43);
+        buffer.writeByte(EncodingCodes.SMALLLONG);
+        buffer.writeByte((byte) -1);
         buffer.writeByte(EncodingCodes.NULL);
         buffer.writeByte(EncodingCodes.NULL);
 
@@ -122,12 +124,14 @@ public class LongTypeCodecTest extends CodecTestSupport {
             assertEquals(42, streamDecoder.readLong(stream, 
streamDecoderState).intValue());
             assertEquals(44, streamDecoder.readLong(stream, 
streamDecoderState, 42));
             assertEquals(43, streamDecoder.readLong(stream, 
streamDecoderState, 42));
+            assertEquals(-1, streamDecoder.readLong(stream, 
streamDecoderState, 42));
             assertNull(streamDecoder.readLong(stream, streamDecoderState));
             assertEquals(42, streamDecoder.readLong(stream, 
streamDecoderState, 42l));
         } else {
             assertEquals(42, decoder.readLong(buffer, 
decoderState).intValue());
             assertEquals(44, decoder.readLong(buffer, decoderState, 42));
             assertEquals(43, decoder.readLong(buffer, decoderState, 42));
+            assertEquals(-1, decoder.readLong(buffer, decoderState, 42));
             assertNull(decoder.readLong(buffer, decoderState));
             assertEquals(42, decoder.readLong(buffer, decoderState, 42l));
         }
@@ -183,13 +187,13 @@ public class LongTypeCodecTest extends CodecTestSupport {
         ProtonBuffer buffer = 
ProtonBufferAllocator.defaultAllocator().allocate();
 
         buffer.writeByte(EncodingCodes.SMALLLONG);
-        buffer.writeByte((byte) 42);
+        buffer.writeByte((byte) -42);
 
         if (fromStream) {
             InputStream stream = new ProtonBufferInputStream(buffer);
-            assertEquals(42l, streamDecoder.readLong(stream, 
streamDecoderState).longValue());
+            assertEquals(-42l, streamDecoder.readLong(stream, 
streamDecoderState).longValue());
         } else {
-            assertEquals(42l, decoder.readLong(buffer, 
decoderState).longValue());
+            assertEquals(-42l, decoder.readLong(buffer, 
decoderState).longValue());
         }
     }
 
@@ -360,14 +364,14 @@ public class LongTypeCodecTest extends CodecTestSupport {
             buffer.writeInt(2);   // Count
             buffer.writeByte(EncodingCodes.LONG);
             buffer.writeLong(1l);   // [0]
-            buffer.writeLong(2l);   // [1]
+            buffer.writeLong(-2l);  // [1]
         } else if (encoding == EncodingCodes.SMALLLONG) {
             buffer.writeByte(EncodingCodes.ARRAY32);
             buffer.writeInt(11);  // Size
             buffer.writeInt(2);   // Count
             buffer.writeByte(EncodingCodes.SMALLLONG);
             buffer.writeByte((byte) 1);   // [0]
-            buffer.writeByte((byte) 2);   // [1]
+            buffer.writeByte((byte) -2);  // [1]
         }
 
         final Object result;
@@ -386,7 +390,7 @@ public class LongTypeCodecTest extends CodecTestSupport {
 
         assertEquals(2, array.length);
         assertEquals(1, array[0]);
-        assertEquals(2, array[1]);
+        assertEquals(-2, array[1]);
     }
 
     @Test


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

Reply via email to