Looking at the code for dialog, the parsing has had a fix for its escaping since the version in piCore (20181107).
The one in use in x86 and x86_64 versions of tinycore is also more recent (20250116).
This is diffing the argv.c from dialog-1.3-20260107 (current) and dialog-1.3-20181107 (piCore):
(parts snipped for clarity)
--- dialog-1.3-20181107/argv.c
+++ dialog-1.3-20260107/argv.c
...
@@ -60,37 +59,38 @@
for (pass = 0; pass < 2; ++pass) {
bool inparm = FALSE;
bool quoted = FALSE;
- bool escape = FALSE;
char *param = blob;
size_t count = 0;
for (n = 0; n < length; ++n) {
- if (escape) {
- ;
- } else if (quoted && blob[n] == '"') {
+ if (quoted && blob[n] == '"') {
quoted = FALSE;
} else if (blob[n] == '"') {
quoted = TRUE;
if (!inparm) {
- if (pass)
+ if (pass) {
result[count] = param;
+ }
++count;
inparm = TRUE;
}
} else if (!quoted && isspace(UCH(blob[n]))) {
if (inparm) {
if (pass) {
- *param++ = '\0';
+ *param = '\0';
}
+ ++param;
inparm = FALSE;
}
} else {
if (blob[n] == '\\') {
- if (n + 1 == length) {
+ size_t n1 = (n + 1);
+ bool ignore = FALSE;
+ if (n1 == length) {
break; /* The string is terminated by a backslash */
- } else if ((blob[n + 1] == '\\') ||
- (blob[n + 1] == '"') ||
- (!quoted && blob[n + 1] == '\n')) {
+ } else if ((blob[n1] == '\\') ||
+ (blob[n1] == '"') ||
+ (ignore = (blob[n1] == '\n'))) {
/* eat the backslash */
if (pass) {
--length;
@@ -98,38 +98,40 @@
blob[k] = blob[k + 1];
blob[length] = '\0';
} else {
- escape = TRUE;
- continue;
+ ++param; /* pretend I ate it */
}
+ if (ignore)
+ continue;
}
}
...
Perhaps we can request an updated extension from bmarkus?