diff options
author | Delio Brignoli <brignoli.delio@gmail.com> | 2016-08-20 10:51:28 +0200 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2016-09-01 18:09:44 +1000 |
commit | f98bb2ddcbfed7033ae93ae8fe98b0540a9fb42f (patch) | |
tree | e0cc5f6fb0d9ff1124ae99b360fde5dd59c660b9 /py | |
parent | ce1c786297e69df4a82e83ac379f8ef068e709f6 (diff) | |
download | micropython-f98bb2ddcbfed7033ae93ae8fe98b0540a9fb42f.tar.gz micropython-f98bb2ddcbfed7033ae93ae8fe98b0540a9fb42f.zip |
py/mpprint: Fail an assertion with unsupported format specifiers.
Arguments of an unknown type cannot be skipped and continuing to parse a
format string after encountering an unknown format specifier leads to
undefined behaviour. This patch helps to find use of unsupported formats.
Diffstat (limited to 'py')
-rw-r--r-- | py/mpprint.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/py/mpprint.c b/py/mpprint.c index cb49b1227a..97ea33ad2a 100644 --- a/py/mpprint.c +++ b/py/mpprint.c @@ -537,10 +537,12 @@ int mp_vprintf(const mp_print_t *print, const char *fmt, va_list args) { chrs += mp_print_int(print, arg_value, *fmt == 'd', 10, 'a', flags, fill, width); break; } - // fall through to default case to print unknown format char + assert(!"unsupported fmt char"); } #endif default: + // if it's not %% then it's an unsupported format character + assert(*fmt == '%' || !"unsupported fmt char"); print->print_strn(print->data, fmt, 1); chrs += 1; break; |