summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@rabbitmq.com>2014-03-17 12:28:21 +0000
committerMatthias Radestock <matthias@rabbitmq.com>2014-03-17 12:28:21 +0000
commit9cd6a5bad43c2a3b064127483ab37addf37a1881 (patch)
tree9ae2422a53cabe140f680f30fc65bdf9a6e34b3a
parentb3a666b4adab5b2cd5ecd4e1aa01a7f82d65a5bf (diff)
downloadrabbitmq-server-bug25374.tar.gz
change AMQP codec field type 'b' interpretationbug25374
from unsigned to signed, in compliance with the spec and most clients.
-rw-r--r--src/rabbit_binary_generator.erl2
-rw-r--r--src/rabbit_binary_parser.erl2
-rw-r--r--src/rabbit_tests.erl4
3 files changed, 4 insertions, 4 deletions
diff --git a/src/rabbit_binary_generator.erl b/src/rabbit_binary_generator.erl
index 83f68ed3..1e5ab0a7 100644
--- a/src/rabbit_binary_generator.erl
+++ b/src/rabbit_binary_generator.erl
@@ -126,7 +126,7 @@ field_value_to_binary(decimal, V) -> {Before, After} = V,
field_value_to_binary(timestamp, V) -> [$T, <<V:64>>];
field_value_to_binary(table, V) -> [$F | table_to_binary(V)];
field_value_to_binary(array, V) -> [$A | array_to_binary(V)];
-field_value_to_binary(byte, V) -> [$b, <<V:8/unsigned>>];
+field_value_to_binary(byte, V) -> [$b, <<V:8/signed>>];
field_value_to_binary(double, V) -> [$d, <<V:64/float>>];
field_value_to_binary(float, V) -> [$f, <<V:32/float>>];
field_value_to_binary(long, V) -> [$l, <<V:64/signed>>];
diff --git a/src/rabbit_binary_parser.erl b/src/rabbit_binary_parser.erl
index f65d8ea7..9ffeb41a 100644
--- a/src/rabbit_binary_parser.erl
+++ b/src/rabbit_binary_parser.erl
@@ -71,7 +71,7 @@ parse_field_value(<<$F, VLen:32/unsigned, Table:VLen/binary, R/binary>>) ->
parse_field_value(<<$A, VLen:32/unsigned, Array:VLen/binary, R/binary>>) ->
{array, parse_array(Array), R};
-parse_field_value(<<$b, V:8/unsigned, R/binary>>) -> {byte, V, R};
+parse_field_value(<<$b, V:8/signed, R/binary>>) -> {byte, V, R};
parse_field_value(<<$d, V:64/float, R/binary>>) -> {double, V, R};
parse_field_value(<<$f, V:32/float, R/binary>>) -> {float, V, R};
parse_field_value(<<$l, V:64/signed, R/binary>>) -> {long, V, R};
diff --git a/src/rabbit_tests.erl b/src/rabbit_tests.erl
index 1552d1ec..b56aa805 100644
--- a/src/rabbit_tests.erl
+++ b/src/rabbit_tests.erl
@@ -429,7 +429,7 @@ test_table_codec() ->
{<<"table">>, table, [{<<"one">>, signedint, 54321},
{<<"two">>, longstr,
<<"A long string">>}]},
- {<<"byte">>, byte, 255},
+ {<<"byte">>, byte, -128},
{<<"long">>, long, 1234567890},
{<<"short">>, short, 655},
{<<"bool">>, bool, true},
@@ -446,7 +446,7 @@ test_table_codec() ->
5,"table", "F", 31:32, % length of table
3,"one", "I", 54321:32,
3,"two", "S", 13:32, "A long string",
- 4,"byte", "b", 255:8,
+ 4,"byte", "b", -128:8/signed,
4,"long", "l", 1234567890:64,
5,"short", "s", 655:16,
4,"bool", "t", 1,