From c1bbaf4050c25f323ab6c37492608de8ecb66968 Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Mon, 15 Sep 2014 23:07:34 -0400 Subject: Fix path_trim_whitespace() sign extension. It should have been implemented as interpreting chars as unsigned so that code points >= 0x80 would not get sign-extended and seen as negative values. Fixes FS#12995 - path_trim_whitespace() assumes unsigned char Change-Id: I514e369681e00151588585311a0b6c66b9b5200c --- firmware/common/pathfuncs.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/firmware/common/pathfuncs.c b/firmware/common/pathfuncs.c index 4410275..1ee5fe9 100644 --- a/firmware/common/pathfuncs.c +++ b/firmware/common/pathfuncs.c @@ -202,12 +202,15 @@ int path_strip_drive(const char *name, const char **nameptr, bool greedy) */ size_t path_trim_whitespace(const char *name, const char **nameptr) { + /* NOTE: this won't currently treat DEL (0x7f) as non-printable */ + const unsigned char *p = name; int c; - while ((c = *name) <= ' ' && c) - ++name; - const char *first = name; - const char *last = name; + while ((c = *p) <= ' ' && c) + ++p; + + const unsigned char *first = p; + const unsigned char *last = p; while (1) { @@ -217,9 +220,9 @@ size_t path_trim_whitespace(const char *name, const char **nameptr) return last - first; } - while ((c = *++name) > ' '); - last = name; - while (c == ' ') c = *++name; + while ((c = *++p) > ' '); + last = p; + while (c == ' ') c = *++p; } } -- cgit v1.1