From 54f9823b5ecda67cc051d939280f6b23c65c1817 Mon Sep 17 00:00:00 2001 From: Joerg Siebenmorgen Date: Mon, 4 Sep 2023 21:31:59 +0200 Subject: [PATCH 1/3] Fix: RTRIM changes input string --- src/common/blib_func.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/common/blib_func.c b/src/common/blib_func.c index 2b553f87..516722b8 100644 --- a/src/common/blib_func.c +++ b/src/common/blib_func.c @@ -1050,19 +1050,17 @@ void cmd_str1(long funcCode, var_t *arg, var_t *r) { break; } p = arg->v.p.ptr; + uint32_t len = strlen(arg->v.p.ptr); if (*p != '\0') { - while (*p) { - p++; - } - p--; - while (p >= arg->v.p.ptr && (is_wspace(*p))) { + p = p + len - 1; + while (is_wspace(*p)) { + len--; p--; } - p++; - *p = '\0'; } - r->v.p.ptr = (char *)malloc(strlen(arg->v.p.ptr) + 1); - strcpy(r->v.p.ptr, arg->v.p.ptr); + r->v.p.ptr = (char *)malloc(len + 1); + strncpy(r->v.p.ptr, arg->v.p.ptr, len); + r->v.p.ptr[len] = '\0'; r->v.p.length = strlen(r->v.p.ptr) + 1; // alltrim From d24529f6c9b110cb1b8af322ef9f3ba3b3a33ea9 Mon Sep 17 00:00:00 2001 From: Joerg Siebenmorgen Date: Mon, 4 Sep 2023 21:44:46 +0200 Subject: [PATCH 2/3] Fix: RTRIM changes input string --- src/common/blib_func.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/blib_func.c b/src/common/blib_func.c index 516722b8..79994c2f 100644 --- a/src/common/blib_func.c +++ b/src/common/blib_func.c @@ -1053,8 +1053,8 @@ void cmd_str1(long funcCode, var_t *arg, var_t *r) { uint32_t len = strlen(arg->v.p.ptr); if (*p != '\0') { p = p + len - 1; - while (is_wspace(*p)) { - len--; + while (p >= arg->v.p.ptr && is_wspace(*p)) { + len--; p--; } } From 463e277371c3aeceeea41f4ba5b42db8271469de Mon Sep 17 00:00:00 2001 From: Joerg Siebenmorgen Date: Mon, 30 Oct 2023 21:29:08 +0100 Subject: [PATCH 3/3] Add unit test for RTRIM-bug --- samples/distro-examples/tests/strings.bas | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/samples/distro-examples/tests/strings.bas b/samples/distro-examples/tests/strings.bas index dbf0fb9a..b403065b 100644 --- a/samples/distro-examples/tests/strings.bas +++ b/samples/distro-examples/tests/strings.bas @@ -209,4 +209,9 @@ for t in number_test if (t[1] != bin(t[0])) then throw "err: bin(" + str(t[0]) + ") <> " + t[1] if (t[2] != oct(t[0])) then throw "err: oct(" + str(t[0]) + ") <> " + t[2] if (t[3] != hex(t[0])) then throw "err: hex(" + str(t[0]) + ") <> " + t[3] -next \ No newline at end of file +next + +REM Bug: RTRIM trimed input string on the right side +s1 = " test " +s2 = rtrim(s1) +if(s1 != " test ") then throw "err: RTRIM changed input string"