mirror of
https://github.com/micropython/micropython.git
synced 2025-08-15 07:00:36 +02:00
py/mpprint: Fix length calculation for strings with precision-modifier.
Two issues are tackled: 1. The calculation of the correct length to print is fixed to treat the precision as a maximum length instead as the exact length. This is done for both qstr (%q) and for regular str (%s). 2. Fix the incorrect use of mp_printf("%.*s") to mp_print_strn(). Because of the fix of above issue, some testcases that would print an embedded null-byte (^@ in test-output) would now fail. The bug here is that "%s" was used to print null-bytes. Instead, mp_print_strn is used to make sure all bytes are outputted and the exact length is respected. Test-cases are added for both %s and %q with a combination of precision and padding specifiers.
This commit is contained in:
committed by
Damien George
parent
dde0735ac1
commit
5020b14d54
@@ -92,7 +92,7 @@ STATIC void uni_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t
|
||||
}
|
||||
#endif
|
||||
if (kind == PRINT_STR) {
|
||||
mp_printf(print, "%.*s", str_len, str_data);
|
||||
print->print_strn(print->data, (const char *)str_data, str_len);
|
||||
} else {
|
||||
uni_print_quoted(print, str_data, str_len);
|
||||
}
|
||||
|
Reference in New Issue
Block a user