|
@@ -3898,7 +3898,8 @@ wasm_runtime_init_wasi(WASMModuleInstanceCommon *module_inst,
|
|
|
|
|
|
|
|
/* addr_pool(textual) -> apool */
|
|
/* addr_pool(textual) -> apool */
|
|
|
for (i = 0; i < addr_pool_size; i++) {
|
|
for (i = 0; i < addr_pool_size; i++) {
|
|
|
- char *cp, *address, *mask;
|
|
|
|
|
|
|
+ char *cp, *address, *mask, *nextptr, *endptr;
|
|
|
|
|
+ long mask_val;
|
|
|
bool ret = false;
|
|
bool ret = false;
|
|
|
|
|
|
|
|
cp = bh_strdup(addr_pool[i]);
|
|
cp = bh_strdup(addr_pool[i]);
|
|
@@ -3908,18 +3909,40 @@ wasm_runtime_init_wasi(WASMModuleInstanceCommon *module_inst,
|
|
|
goto fail;
|
|
goto fail;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- address = strtok(cp, "/");
|
|
|
|
|
- mask = strtok(NULL, "/");
|
|
|
|
|
|
|
+#ifdef BH_PLATFORM_WINDOWS
|
|
|
|
|
+ address = strtok_s(cp, "/", &nextptr);
|
|
|
|
|
+ mask = strtok_s(NULL, "/", &nextptr);
|
|
|
|
|
+#else
|
|
|
|
|
+ address = strtok_r(cp, "/", &nextptr);
|
|
|
|
|
+ mask = strtok_r(NULL, "/", &nextptr);
|
|
|
|
|
+#endif
|
|
|
|
|
|
|
|
if (!mask) {
|
|
if (!mask) {
|
|
|
snprintf(error_buf, error_buf_size,
|
|
snprintf(error_buf, error_buf_size,
|
|
|
"Invalid address pool entry: %s, must be in the format of "
|
|
"Invalid address pool entry: %s, must be in the format of "
|
|
|
"ADDRESS/MASK",
|
|
"ADDRESS/MASK",
|
|
|
addr_pool[i]);
|
|
addr_pool[i]);
|
|
|
|
|
+ wasm_runtime_free(cp);
|
|
|
|
|
+ goto fail;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ errno = 0;
|
|
|
|
|
+ mask_val = strtol(mask, &endptr, 10);
|
|
|
|
|
+
|
|
|
|
|
+ if (mask == endptr || *endptr != '\0') {
|
|
|
|
|
+ snprintf(error_buf, error_buf_size,
|
|
|
|
|
+ "Invalid address pool entry: mask must be a number");
|
|
|
|
|
+ wasm_runtime_free(cp);
|
|
|
|
|
+ goto fail;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (errno != 0 || mask_val < 0) {
|
|
|
|
|
+ snprintf(error_buf, error_buf_size,
|
|
|
|
|
+ "Init wasi environment failed: invalid mask number");
|
|
|
|
|
+ wasm_runtime_free(cp);
|
|
|
goto fail;
|
|
goto fail;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- ret = addr_pool_insert(apool, address, (uint8)atoi(mask));
|
|
|
|
|
|
|
+ ret = addr_pool_insert(apool, address, (uint8)mask_val);
|
|
|
wasm_runtime_free(cp);
|
|
wasm_runtime_free(cp);
|
|
|
if (!ret) {
|
|
if (!ret) {
|
|
|
set_error_buf(error_buf, error_buf_size,
|
|
set_error_buf(error_buf, error_buf_size,
|