diff options
author | Omer Katz <omer.drow@gmail.com> | 2019-02-28 11:57:25 +0200 |
---|---|---|
committer | Omer Katz <omer.drow@gmail.com> | 2019-02-28 11:57:25 +0200 |
commit | d870214cb9e0b754b66cdcb3df785a6fa823e145 (patch) | |
tree | 263fdb451172b736dc36080a41ca6fc86b31f934 | |
parent | ed759687c069b12c914d8ebdab26ef34d068fca9 (diff) | |
download | py-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.py | 3 | ||||
-rw-r--r-- | t/unit/test_serialization.py | 7 |
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: |