diff options
| -rw-r--r-- | win32/process.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/win32/process.c b/win32/process.c index 5dc0f7080..5c818a3c0 100644 --- a/win32/process.c +++ b/win32/process.c | |||
| @@ -189,6 +189,7 @@ spawnveq(int mode, const char *path, char *const *argv, char *const *env) | |||
| 189 | int i, argc; | 189 | int i, argc; |
| 190 | intptr_t ret; | 190 | intptr_t ret; |
| 191 | struct stat st; | 191 | struct stat st; |
| 192 | size_t len = 0; | ||
| 192 | 193 | ||
| 193 | /* | 194 | /* |
| 194 | * Require that the file exists, is a regular file and is executable. | 195 | * Require that the file exists, is a regular file and is executable. |
| @@ -206,8 +207,10 @@ spawnveq(int mode, const char *path, char *const *argv, char *const *env) | |||
| 206 | 207 | ||
| 207 | argc = string_array_len((char **)argv); | 208 | argc = string_array_len((char **)argv); |
| 208 | new_argv = xzalloc(sizeof(*argv)*(argc+1)); | 209 | new_argv = xzalloc(sizeof(*argv)*(argc+1)); |
| 209 | for (i = 0;i < argc;i++) | 210 | for (i = 0; i < argc; i++) { |
| 210 | new_argv[i] = quote_arg(argv[i]); | 211 | new_argv[i] = quote_arg(argv[i]); |
| 212 | len += strlen(new_argv[i]) + 1; | ||
| 213 | } | ||
| 211 | 214 | ||
| 212 | /* Special case: spawnve won't execute a batch file if the first | 215 | /* Special case: spawnve won't execute a batch file if the first |
| 213 | * argument is a relative path containing forward slashes. Absolute | 216 | * argument is a relative path containing forward slashes. Absolute |
| @@ -234,6 +237,8 @@ spawnveq(int mode, const char *path, char *const *argv, char *const *env) | |||
| 234 | 237 | ||
| 235 | errno = 0; | 238 | errno = 0; |
| 236 | ret = spawnve(mode, new_path ? new_path : path, new_argv, env); | 239 | ret = spawnve(mode, new_path ? new_path : path, new_argv, env); |
| 240 | if (errno == EINVAL && len > bb_arg_max()) | ||
| 241 | errno = E2BIG; | ||
| 237 | 242 | ||
| 238 | done: | 243 | done: |
| 239 | for (i = 0;i < argc;i++) | 244 | for (i = 0;i < argc;i++) |
