summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOmer Katz <omer.drow@gmail.com>2019-02-28 11:57:25 +0200
committerOmer Katz <omer.drow@gmail.com>2019-02-28 11:57:25 +0200
commitd870214cb9e0b754b66cdcb3df785a6fa823e145 (patch)
tree263fdb451172b736dc36080a41ca6fc86b31f934
parented759687c069b12c914d8ebdab26ef34d068fca9 (diff)
downloadpy-amqp-fix-bitmap-parsing.tar.gz
The bitcount will reset only when we move to the next byte.fix-bitmap-parsing
Add a test to verify that parsing two consecutive bitmaps does not fail.
-rw-r--r--amqp/serialization.py3
-rw-r--r--t/unit/test_serialization.py7
2 files changed, 8 insertions, 2 deletions
diff --git a/amqp/serialization.py b/amqp/serialization.py
index 183ae2e..758a3c0 100644
--- a/amqp/serialization.py
+++ b/amqp/serialization.py
@@ -172,11 +172,10 @@ def loads(format, buf, offset=0,
if not bitcount:
bits = ord(buf[offset:offset + 1])
offset += 1
- bitcount = 8
+ bitcount = 8
val = (bits & 1) == 1
bits >>= 1
bitcount -= 1
-
elif p == 'o':
bitcount = bits = 0
val, = unpack_from('>B', buf, offset)
diff --git a/t/unit/test_serialization.py b/t/unit/test_serialization.py
index 3891090..b4165ae 100644
--- a/t/unit/test_serialization.py
+++ b/t/unit/test_serialization.py
@@ -105,6 +105,13 @@ class test_serialization:
actual, _ = loads('BssbbbbbF', buf)
assert actual == expected
+ def test_sixteen_bitflags(self):
+ expected = [True, False] * 8
+ format = 'b' * len(expected)
+ buf = dumps(format, expected)
+ actual, _ = loads(format, buf)
+ assert actual == expected
+
class test_GenericContent: