Mercurial > hg
changeset 40124:b638219a23c3
cborutil: cast bytearray to bytes
This code didn't like passing in bytearray instances. Let's cast
bytearray to bytes so it works.
Differential Revision: https://phab.mercurial-scm.org/D4914
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Thu, 04 Oct 2018 15:08:42 -0700 |
parents | 627b0f9baeaf |
children | e2fe1074024c |
files | mercurial/utils/cborutil.py tests/test-cbor.py |
diffstat | 2 files changed, 13 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/utils/cborutil.py Mon Oct 08 17:06:24 2018 -0700 +++ b/mercurial/utils/cborutil.py Thu Oct 04 15:08:42 2018 -0700 @@ -925,6 +925,11 @@ * Integer number of bytes decoded from the new input. * Integer number of bytes wanted to decode the next value. """ + # We /might/ be able to support passing a bytearray all the + # way through. For now, let's cheat. + if isinstance(b, bytearray): + b = bytes(b) + # Our strategy for buffering is to aggregate the incoming chunks in a # list until we've received enough data to decode the next item. # This is slightly more complicated than using an ``io.BytesIO``
--- a/tests/test-cbor.py Mon Oct 08 17:06:24 2018 -0700 +++ b/tests/test-cbor.py Thu Oct 04 15:08:42 2018 -0700 @@ -965,6 +965,14 @@ self.assertEqual(decoder.getavailable(), [source]) + def testbytearray(self): + source = b''.join(cborutil.streamencode(b'foobar')) + + decoder = cborutil.bufferingdecoder() + decoder.decode(bytearray(source)) + + self.assertEqual(decoder.getavailable(), [b'foobar']) + class DecodeallTests(TestCase): def testemptyinput(self): self.assertEqual(cborutil.decodeall(b''), [])