Fix WASI Path Mapping Processing (#3923)

Filesystem paths can be mapped from the host path to a guest path using
the format `<guest-path>::<host-path>`.

Previously `strtok` was used to find the `::` delimiter. Unfortunately
`strtok` processes each delimiter character individually. This meant
that the code was ~equivalent to `strtok(mapping_copy, ":")` which
breaks with Windows-style paths (E.g. `C:\my_path\`).

To fix this `strstr` is used to search for the exact delimiter.
This commit is contained in:
Dylan Johnston 2024-11-24 14:31:55 +11:00 committed by GitHub
parent 00c2aa10a8
commit 9d8150efae
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -3631,8 +3631,14 @@ wasm_runtime_init_wasi(WASMModuleInstanceCommon *module_inst,
bh_memcpy_s(mapping_copy, max_len, map_dir_list[i],
(uint32)(strlen(map_dir_list[i]) + 1));
map_mapped = strtok(mapping_copy, "::");
map_host = strtok(NULL, "::");
const char *delim = "::";
char *delim_pos = strstr(mapping_copy, delim);
if (delim_pos) {
*delim_pos = '\0';
map_mapped = mapping_copy;
map_host = delim_pos + strlen(delim);
}
if (!map_mapped || !map_host) {
if (error_buf)