From d29047255c8e78d4ab2beeef678d466a6bfc0ae2 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 19 Feb 2022 15:35:31 -0800 Subject: [PATCH] altos: Deal with 8-character version numbers With 8 characters, the version number isn't null-terminated, so we need to limit use to the available length in a couple of places. Signed-off-by: Keith Packard --- src/kernel/ao_cmd.c | 4 +++- src/product/ao_flash_task.c | 17 +++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/kernel/ao_cmd.c b/src/kernel/ao_cmd.c index cbee3cd5..d8ba8372 100644 --- a/src/kernel/ao_cmd.c +++ b/src/kernel/ao_cmd.c @@ -270,6 +270,8 @@ ao_reboot(void) #endif #if HAS_VERSION +#define _stringify(x) #x +#define stringify(x) _stringify(x) static void version(void) { @@ -307,7 +309,7 @@ version(void) , (unsigned) ((uint32_t) AO_BOOT_APPLICATION_BOUND - (uint32_t) AO_BOOT_APPLICATION_BASE) #endif ); - printf("software-version %s\n", ao_version); + printf("software-version %." stringify(AO_MAX_VERSION) "s\n", ao_version); } #endif diff --git a/src/product/ao_flash_task.c b/src/product/ao_flash_task.c index 8ae9b2e5..a1daf06a 100644 --- a/src/product/ao_flash_task.c +++ b/src/product/ao_flash_task.c @@ -29,17 +29,26 @@ ao_panic(uint8_t reason) for (;;); } -void -ao_put_string(const char *s) +static void +ao_put_stringn(const char *s, int max) { char c; - while ((c = *s++)) { + while (max--) { + c = *s++; + if (!c) + break; if (c == '\n') ao_usb_putchar('\r'); ao_usb_putchar(c); } } +void +ao_put_string(const char *s) +{ + ao_put_stringn(s, 65535); +} + static void ao_application(void) { @@ -149,7 +158,7 @@ ao_show_version(void) ao_put_hex((uint32_t) AO_BOOT_APPLICATION_BASE); ao_usb_putchar(' '); ao_put_hex((uint32_t) AO_BOOT_APPLICATION_BOUND); - ao_put_string("\nsoftware-version "); ao_put_string(ao_version); + ao_put_string("\nsoftware-version "); ao_put_stringn(ao_version, AO_MAX_VERSION); ao_put_string("\n"); } -- 2.30.2