aboutsummaryrefslogtreecommitdiffstats
path: root/src/process.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/process.c')
-rw-r--r--src/process.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/src/process.c b/src/process.c
index 0d6994bdab1..ef9f295fd89 100644
--- a/src/process.c
+++ b/src/process.c
@@ -1386,9 +1386,10 @@ usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
1386 (ptrdiff_t nargs, Lisp_Object *args) 1386 (ptrdiff_t nargs, Lisp_Object *args)
1387{ 1387{
1388 Lisp_Object buffer, name, program, proc, current_dir, tem; 1388 Lisp_Object buffer, name, program, proc, current_dir, tem;
1389 register unsigned char **new_argv; 1389 unsigned char **new_argv;
1390 ptrdiff_t i; 1390 ptrdiff_t i;
1391 ptrdiff_t count = SPECPDL_INDEX (); 1391 ptrdiff_t count = SPECPDL_INDEX ();
1392 USE_SAFE_ALLOCA;
1392 1393
1393 buffer = args[1]; 1394 buffer = args[1];
1394 if (!NILP (buffer)) 1395 if (!NILP (buffer))
@@ -1464,7 +1465,7 @@ usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
1464 val = Vcoding_system_for_read; 1465 val = Vcoding_system_for_read;
1465 if (NILP (val)) 1466 if (NILP (val))
1466 { 1467 {
1467 args2 = alloca ((nargs + 1) * sizeof *args2); 1468 SAFE_ALLOCA_LISP (args2, nargs + 1);
1468 args2[0] = Qstart_process; 1469 args2[0] = Qstart_process;
1469 for (i = 0; i < nargs; i++) args2[i + 1] = args[i]; 1470 for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
1470 GCPRO2 (proc, current_dir); 1471 GCPRO2 (proc, current_dir);
@@ -1483,7 +1484,7 @@ usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
1483 { 1484 {
1484 if (EQ (coding_systems, Qt)) 1485 if (EQ (coding_systems, Qt))
1485 { 1486 {
1486 args2 = alloca ((nargs + 1) * sizeof *args2); 1487 SAFE_ALLOCA_LISP (args2, nargs + 1);
1487 args2[0] = Qstart_process; 1488 args2[0] = Qstart_process;
1488 for (i = 0; i < nargs; i++) args2[i + 1] = args[i]; 1489 for (i = 0; i < nargs; i++) args2[i + 1] = args[i];
1489 GCPRO2 (proc, current_dir); 1490 GCPRO2 (proc, current_dir);
@@ -1578,7 +1579,7 @@ usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
1578 1579
1579 /* Now that everything is encoded we can collect the strings into 1580 /* Now that everything is encoded we can collect the strings into
1580 NEW_ARGV. */ 1581 NEW_ARGV. */
1581 new_argv = alloca ((nargs - 1) * sizeof *new_argv); 1582 SAFE_NALLOCA (new_argv, 1, nargs - 1);
1582 new_argv[nargs - 2] = 0; 1583 new_argv[nargs - 2] = 0;
1583 1584
1584 for (i = nargs - 2; i-- != 0; ) 1585 for (i = nargs - 2; i-- != 0; )
@@ -1592,6 +1593,7 @@ usage: (start-process NAME BUFFER PROGRAM &rest PROGRAM-ARGS) */)
1592 else 1593 else
1593 create_pty (proc); 1594 create_pty (proc);
1594 1595
1596 SAFE_FREE ();
1595 return unbind_to (count, proc); 1597 return unbind_to (count, proc);
1596} 1598}
1597 1599
@@ -2071,8 +2073,10 @@ get_lisp_to_sockaddr_size (Lisp_Object address, int *familyp)
2071 && VECTORP (XCDR (address))) 2073 && VECTORP (XCDR (address)))
2072 { 2074 {
2073 struct sockaddr *sa; 2075 struct sockaddr *sa;
2074 *familyp = XINT (XCAR (address));
2075 p = XVECTOR (XCDR (address)); 2076 p = XVECTOR (XCDR (address));
2077 if (MAX_ALLOCA - sizeof sa->sa_family < p->header.size)
2078 return 0;
2079 *familyp = XINT (XCAR (address));
2076 return p->header.size + sizeof (sa->sa_family); 2080 return p->header.size + sizeof (sa->sa_family);
2077 } 2081 }
2078 return 0; 2082 return 0;
@@ -4973,18 +4977,17 @@ read_and_dispose_of_process_output (struct Lisp_Process *p, char *chars,
4973 for decoding. */ 4977 for decoding. */
4974 4978
4975static int 4979static int
4976read_process_output (Lisp_Object proc, register int channel) 4980read_process_output (Lisp_Object proc, int channel)
4977{ 4981{
4978 register ssize_t nbytes; 4982 ssize_t nbytes;
4979 char *chars; 4983 struct Lisp_Process *p = XPROCESS (proc);
4980 register struct Lisp_Process *p = XPROCESS (proc);
4981 struct coding_system *coding = proc_decode_coding_system[channel]; 4984 struct coding_system *coding = proc_decode_coding_system[channel];
4982 int carryover = p->decoding_carryover; 4985 int carryover = p->decoding_carryover;
4983 int readmax = 4096; 4986 enum { readmax = 4096 };
4984 ptrdiff_t count = SPECPDL_INDEX (); 4987 ptrdiff_t count = SPECPDL_INDEX ();
4985 Lisp_Object odeactivate; 4988 Lisp_Object odeactivate;
4989 char chars[sizeof coding->carryover + readmax];
4986 4990
4987 chars = alloca (carryover + readmax);
4988 if (carryover) 4991 if (carryover)
4989 /* See the comment above. */ 4992 /* See the comment above. */
4990 memcpy (chars, SDATA (p->decoding_buf), carryover); 4993 memcpy (chars, SDATA (p->decoding_buf), carryover);
@@ -6837,7 +6840,7 @@ add_timer_wait_descriptor (int fd)
6837{ 6840{
6838 FD_SET (fd, &input_wait_mask); 6841 FD_SET (fd, &input_wait_mask);
6839 FD_SET (fd, &non_keyboard_wait_mask); 6842 FD_SET (fd, &non_keyboard_wait_mask);
6840 FD_SET (fd, &non_process_wait_mask); 6843 FD_SET (fd, &non_process_wait_mask);
6841 fd_callback_info[fd].func = timerfd_callback; 6844 fd_callback_info[fd].func = timerfd_callback;
6842 fd_callback_info[fd].data = NULL; 6845 fd_callback_info[fd].data = NULL;
6843 fd_callback_info[fd].condition |= FOR_READ; 6846 fd_callback_info[fd].condition |= FOR_READ;