summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--extmod/modubinascii.c6
-rw-r--r--tests/extmod/ubinascii_micropython.py3
-rw-r--r--tests/extmod/ubinascii_micropython.py.exp1
3 files changed, 10 insertions, 0 deletions
diff --git a/extmod/modubinascii.c b/extmod/modubinascii.c
index 07b8b15bf..cf250d27f 100644
--- a/extmod/modubinascii.c
+++ b/extmod/modubinascii.c
@@ -42,6 +42,12 @@ mp_obj_t mod_binascii_hexlify(size_t n_args, const mp_obj_t *args) {
mp_buffer_info_t bufinfo;
mp_get_buffer_raise(args[0], &bufinfo, MP_BUFFER_READ);
+ // Code below assumes non-zero buffer length when computing size with
+ // separator, so handle the zero-length case here.
+ if (bufinfo.len == 0) {
+ return mp_const_empty_bytes;
+ }
+
vstr_t vstr;
size_t out_len = bufinfo.len * 2;
if (n_args > 1) {
diff --git a/tests/extmod/ubinascii_micropython.py b/tests/extmod/ubinascii_micropython.py
index a4c00a2cb..77084ec9e 100644
--- a/tests/extmod/ubinascii_micropython.py
+++ b/tests/extmod/ubinascii_micropython.py
@@ -10,3 +10,6 @@ except ImportError:
# two arguments supported in uPy but not CPython
a = binascii.hexlify(b'123', ':')
print(a)
+
+# zero length buffer
+print(binascii.hexlify(b'', b':'))
diff --git a/tests/extmod/ubinascii_micropython.py.exp b/tests/extmod/ubinascii_micropython.py.exp
index 0ae3d768e..a195d2602 100644
--- a/tests/extmod/ubinascii_micropython.py.exp
+++ b/tests/extmod/ubinascii_micropython.py.exp
@@ -1 +1,2 @@
b'31:32:33'
+b''