You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by jo...@apache.org on 2019/02/07 09:18:42 UTC

[tinkerpop] branch master updated: GraphBinary: use exception instead of assertion for msb check CTR

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

jorgebg pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git


The following commit(s) were added to refs/heads/master by this push:
     new f799335  GraphBinary: use exception instead of assertion for msb check CTR
f799335 is described below

commit f799335a29e5da98644b75e8d5d9aea810bc6262
Author: Jorge Bay Gondra <jo...@gmail.com>
AuthorDate: Thu Feb 7 10:18:38 2019 +0100

    GraphBinary: use exception instead of assertion for msb check CTR
---
 .../gremlin/driver/ser/binary/RequestMessageSerializer.java      | 9 +++++++--
 .../gremlin/driver/ser/binary/ResponseMessageSerializer.java     | 9 +++++++--
 .../driver/ser/binary/GraphBinaryMessageSerializerV1Test.java    | 9 +++++++++
 3 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/RequestMessageSerializer.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/RequestMessageSerializer.java
index 7ac1c97..3277598 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/RequestMessageSerializer.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/RequestMessageSerializer.java
@@ -29,8 +29,13 @@ import java.util.UUID;
 public class RequestMessageSerializer {
 
     public RequestMessage readValue(final ByteBuf buffer, final GraphBinaryReader context) throws SerializationException {
-        final int version = buffer.readByte();
-        assert version >>> 31 == 1;
+        final int version = buffer.readByte() & 0xff;
+
+        if (version >>> 7 != 1) {
+            // This is an indication that the request buffer was incorrectly built
+            // Or the buffer offsets are wrong
+            throw new SerializationException("The most significant bit should be set according to the format");
+        }
 
         final UUID id = context.readValue(buffer, UUID.class, false);
         final String op = context.readValue(buffer, String.class, false);
diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/ResponseMessageSerializer.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/ResponseMessageSerializer.java
index cceb260..f93fe28 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/ResponseMessageSerializer.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/binary/ResponseMessageSerializer.java
@@ -32,8 +32,13 @@ import java.util.UUID;
 public class ResponseMessageSerializer {
 
     public ResponseMessage readValue(final ByteBuf buffer, final GraphBinaryReader context, final boolean nullable) throws SerializationException {
-        final int version = buffer.readByte();
-        assert version >>> 31 == 1;
+        final int version = buffer.readByte() & 0xff;
+
+        if (version >>> 7 != 1) {
+            // This is an indication that the response buffer was incorrectly built
+            // Or the buffer offsets are wrong
+            throw new SerializationException("The most significant bit should be set according to the format");
+        }
 
         return ResponseMessage.build(context.readValue(buffer, UUID.class, true))
                 .code(ResponseStatusCode.getFromValue(context.readValue(buffer, Integer.class, false)))
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryMessageSerializerV1Test.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryMessageSerializerV1Test.java
index 0e8e7ed..7321d1e 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryMessageSerializerV1Test.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryMessageSerializerV1Test.java
@@ -148,6 +148,15 @@ public class GraphBinaryMessageSerializerV1Test {
         assertEquals(1, counter);
     }
 
+    @Test(expected = IllegalStateException.class)
+    public void shouldThrowWhenConfigurationOfRegistryBuilderFails() {
+        final GraphBinaryMessageSerializerV1 serializer = new GraphBinaryMessageSerializerV1();
+        final Map<String, Object> config = new HashMap<>();
+        config.put(GraphBinaryMessageSerializerV1.TOKEN_BUILDER, "org.apache.tinkerpop.gremlin.driver.ser.binary.NonExistentClass");
+
+        serializer.configure(config, null);
+    }
+
     private static void assertResponseEquals(ResponseMessage expected, ResponseMessage actual) {
         assertEquals(expected.getRequestId(), actual.getRequestId());
         // Status