File tree Expand file tree Collapse file tree 1 file changed +17
-7
lines changed Expand file tree Collapse file tree 1 file changed +17
-7
lines changed Original file line number Diff line number Diff line change @@ -223,21 +223,31 @@ char **_swift_stdlib_getUnsafeArgvArgc(int *outArgLen) {
223
223
224
224
__wasi_errno_t err;
225
225
226
- size_t argv_buf_size;
227
- size_t argc;
226
+ size_t argv_buf_size = 0 ;
227
+ size_t argc = 0 ;
228
228
err = __wasi_args_sizes_get (&argc, &argv_buf_size);
229
- if (err != __WASI_ERRNO_SUCCESS)
230
- return nullptr ;
229
+ if (err != __WASI_ERRNO_SUCCESS) {
230
+ argc = 0 ;
231
+ }
231
232
233
+ // __wasi_args_sizes_get requires the caller to allocate extra space for NULL
234
+ // termination.
232
235
size_t num_ptrs = argc + 1 ;
233
- char *argv_buf = static_cast <char *>(alloc (argv_buf_size));
234
236
char **argv = static_cast <char **>(calloc (num_ptrs, sizeof (char *)));
237
+ if (err != __WASI_ERRNO_SUCCESS) {
238
+ *outArgLen = 0 ;
239
+ argv[0 ] = nullptr ;
240
+ return argv;
241
+ }
235
242
243
+ char *argv_buf = static_cast <char *>(malloc (argv_buf_size));
236
244
err = __wasi_args_get ((uint8_t **)argv, (uint8_t *)argv_buf);
237
245
if (err != __WASI_ERRNO_SUCCESS) {
238
246
free (argv_buf);
239
- free (argv);
240
- return nullptr ;
247
+
248
+ *outArgLen = 0 ;
249
+ argv[0 ] = nullptr ;
250
+ return argv;
241
251
}
242
252
243
253
*outArgLen = static_cast <int >(argc);
You can’t perform that action at this time.
0 commit comments