core: execl_: Allow 1000 arguments.
authorJan Nieuwenhuizen <janneke@gnu.org>
Tue, 26 Jun 2018 04:05:20 +0000 (06:05 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Tue, 26 Jun 2018 04:05:20 +0000 (06:05 +0200)
* src/posix.c (execl_): Allow 1000 arguments.

src/posix.c

index fc7ddd495f4b8ee9c3a55b24f1594d98ac158b45..60b9c091d48102f28fd8dcf584c93186cbf66447 100644 (file)
@@ -270,15 +270,20 @@ primitive_fork ()
 SCM
 execl_ (SCM file_name, SCM args) ///((name . "execl"))
 {
-  char *c_argv[100];
+  char *c_argv[1000];           // POSIX minimum 4096
   int i = 0;
-  int n = 0;
+  int n = n;
+
+  if (length__ (args) > 1000)
+    error (cell_symbol_system_error,
+           cons (file_name,
+                 cons (MAKE_STRING (cstring_to_list ("too many arguments")),
+                       cons (file_name, args))));
   c_argv[i++] = string_to_cstring_ (file_name, string_to_cstring_buf+n);
   n += length__ (STRING (file_name)) + 1;
   while (args != cell_nil)
     {
       assert (TYPE (CAR (args)) == TSTRING);
-      assert (i < 20);
       c_argv[i++] = string_to_cstring_ (CAR (args), string_to_cstring_buf+n);
       n += length__ (STRING (CAR (args))) + 1;
       args = CDR (args);