Windows process: escape backslashes before quotes

This commit is contained in:
Semphris 2024-09-13 22:23:49 -04:00 committed by Sam Lantinga
parent 90e01040c5
commit 3cf54675bb
2 changed files with 13 additions and 0 deletions

View File

@ -95,6 +95,10 @@ static bool join_arguments(const char * const *args, char **args_out)
case '"':
len += 2;
break;
case '\\':
/* only escape backslashes that precede a double quote */
len += (*(a + 1) == '"' || *(a + 1) == '\0') ? 2 : 1;
break;
default:
len += 1;
break;
@ -121,6 +125,12 @@ static bool join_arguments(const char * const *args, char **args_out)
result[i_out++] = '\\';
result[i_out++] = *a;
break;
case '\\':
result[i_out++] = *a;
if (*(a + 1) == '"' || *(a + 1) == '\0') {
result[i_out++] = *a;
}
break;
default:
result[i_out++] = *a;
break;

View File

@ -92,6 +92,9 @@ static int SDLCALL process_testArguments(void *arg)
"'a' 'b' 'c'",
"%d%%%s",
"\\t\\c",
"evil\\",
"a\\b\"c\\",
"\"\\^&|<>%", /* characters with a special meaning */
NULL
};
SDL_Process *process = NULL;