Selaa lähdekoodia

initialize WASI stdio handles to invalid for better error handling (#4092)

* initialize WASI stdio handles to invalid for better error handling
* implement os_invalid_raw_handle function for consistent invalid handle representation
liang.he 8 kuukautta sitten
vanhempi
sitoutus
216404d7cb

+ 6 - 0
core/iwasm/aot/aot_loader.c

@@ -4127,6 +4127,12 @@ create_module(char *name, char *error_buf, uint32 error_buf_size)
     }
 #endif
 
+#if WASM_ENABLE_LIBC_WASI != 0
+    module->wasi_args.stdio[0] = os_invalid_raw_handle();
+    module->wasi_args.stdio[1] = os_invalid_raw_handle();
+    module->wasi_args.stdio[2] = os_invalid_raw_handle();
+#endif
+
     return module;
 #if WASM_ENABLE_GC != 0
 fail2:

+ 6 - 0
core/iwasm/interpreter/wasm_loader.c

@@ -6376,6 +6376,12 @@ create_module(char *name, char *error_buf, uint32 error_buf_size)
     }
 #endif
 
+#if WASM_ENABLE_LIBC_WASI != 0
+    module->wasi_args.stdio[0] = os_invalid_raw_handle();
+    module->wasi_args.stdio[1] = os_invalid_raw_handle();
+    module->wasi_args.stdio[2] = os_invalid_raw_handle();
+#endif
+
     (void)ret;
     return module;
 

+ 6 - 0
core/iwasm/interpreter/wasm_mini_loader.c

@@ -3137,6 +3137,12 @@ create_module(char *name, char *error_buf, uint32 error_buf_size)
     }
 #endif
 
+#if WASM_ENABLE_LIBC_WASI != 0
+    module->wasi_args.stdio[0] = os_invalid_raw_handle();
+    module->wasi_args.stdio[1] = os_invalid_raw_handle();
+    module->wasi_args.stdio[2] = os_invalid_raw_handle();
+#endif
+
     (void)ret;
     return module;
 }

+ 6 - 0
core/shared/platform/alios/alios_platform.c

@@ -79,3 +79,9 @@ os_dcache_flush()
 void
 os_icache_flush(void *start, size_t len)
 {}
+
+os_raw_file_handle
+os_invalid_raw_handle(void)
+{
+    return -1;
+}

+ 7 - 1
core/shared/platform/common/posix/posix_file.c

@@ -1032,4 +1032,10 @@ char *
 os_realpath(const char *path, char *resolved_path)
 {
     return realpath(path, resolved_path);
-}
+}
+
+os_raw_file_handle
+os_invalid_raw_handle(void)
+{
+    return -1;
+}

+ 7 - 1
core/shared/platform/esp-idf/espidf_file.c

@@ -1032,4 +1032,10 @@ char *
 os_realpath(const char *path, char *resolved_path)
 {
     return realpath(path, resolved_path);
-}
+}
+
+os_raw_file_handle
+os_invalid_raw_handle(void)
+{
+    return -1;
+}

+ 9 - 0
core/shared/platform/include/platform_api_extension.h

@@ -1607,6 +1607,15 @@ os_is_dir_stream_valid(os_dir_stream *dir_stream);
 os_file_handle
 os_get_invalid_handle(void);
 
+/**
+ * Returns an invalid raw file handle that is guaranteed to cause failure when
+ * called with any filesystem operation.
+ *
+ * @return the invalid raw file handle
+ */
+os_raw_file_handle
+os_invalid_raw_handle(void);
+
 /**
  * Checks whether the given file handle is valid. An invalid handle is
  * guaranteed to cause failure when called with any filesystem operation.

+ 6 - 0
core/shared/platform/riot/riot_platform.c

@@ -95,3 +95,9 @@ os_dcache_flush(void)
 void
 os_icache_flush(void *start, size_t len)
 {}
+
+os_raw_file_handle
+os_invalid_raw_handle(void)
+{
+    return -1;
+}

+ 6 - 0
core/shared/platform/rt-thread/rtt_file.c

@@ -192,3 +192,9 @@ posix_fallocate(int __fd, off_t __offset, off_t __length)
     errno = ENOSYS;
     return -1;
 }
+
+os_raw_file_handle
+os_invalid_raw_handle(void)
+{
+    return -1;
+}

+ 6 - 0
core/shared/platform/windows/win_file.c

@@ -1810,3 +1810,9 @@ os_realpath(const char *path, char *resolved_path)
 
     return resolved_path;
 }
+
+os_raw_file_handle
+os_invalid_raw_handle(void)
+{
+    return INVALID_HANDLE_VALUE;
+}

+ 6 - 0
core/shared/platform/zephyr/zephyr_platform.c

@@ -255,3 +255,9 @@ set_exec_mem_alloc_func(exec_mem_alloc_func_t alloc_func,
     exec_mem_alloc_func = alloc_func;
     exec_mem_free_func = free_func;
 }
+
+os_raw_file_handle
+os_invalid_raw_handle(void)
+{
+    return -1;
+}