From 793d826d9df67c3f544505beda63ca36d8dfa1c4 Mon Sep 17 00:00:00 2001 From: Damien George Date: Fri, 1 Sep 2017 10:10:51 +1000 Subject: [PATCH] py/modstruct: In struct.pack, stop converting if there are no args left. This patch makes a repeat counter behave the same as repeating the typecode, when there are not enough args. For example: struct.pack('2I', 1) now behave the same as struct.pack('II', 1). --- py/modstruct.c | 3 ++- tests/basics/struct_micropython.py | 3 +++ tests/basics/struct_micropython.py.exp | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/py/modstruct.c b/py/modstruct.c index 1daa333388..0d4a45f6b6 100644 --- a/py/modstruct.c +++ b/py/modstruct.c @@ -206,7 +206,8 @@ STATIC void struct_pack_into_internal(mp_obj_t fmt_in, byte *p, byte* end_p, siz memset(p + to_copy, 0, sz - to_copy); p += sz; } else { - while (sz--) { + // If we run out of args then we just finish; CPython would raise struct.error + while (sz-- && i < n_args) { mp_binary_set_val(fmt_type, *fmt, args[i++], &p); } } diff --git a/tests/basics/struct_micropython.py b/tests/basics/struct_micropython.py index 4b9dfe1378..f203a4666f 100644 --- a/tests/basics/struct_micropython.py +++ b/tests/basics/struct_micropython.py @@ -18,6 +18,9 @@ s = struct.pack("