Commit 754790b6 authored by Chong Yidong's avatar Chong Yidong

* character.c (Fstring, Funibyte_string): Use SAFE_ALLOCA to

prevent stack overflow if number of arguments is too large
(Bug#6214).
parent dc9ed794
2010-05-18 Chong Yidong <cyd@stupidchicken.com>
* character.c (Fstring, Funibyte_string): Use SAFE_ALLOCA to
prevent stack overflow if number of arguments is too large
(Bug#6214).
2010-05-11 Eli Zaretskii <eliz@gnu.org>
* makefile.w32-in ($(BLD)/w32fns.$(O)): Depend on $(SRC)/w32.h.
......
......@@ -961,10 +961,13 @@ usage: (string &rest CHARACTERS) */)
int n;
Lisp_Object *args;
{
int i;
unsigned char *buf = (unsigned char *) alloca (MAX_MULTIBYTE_LENGTH * n);
unsigned char *p = buf;
int c;
int i, c;
unsigned char *buf, *p;
Lisp_Object str;
USE_SAFE_ALLOCA;
SAFE_ALLOCA (buf, unsigned char *, MAX_MULTIBYTE_LENGTH * n);
p = buf;
for (i = 0; i < n; i++)
{
......@@ -973,7 +976,9 @@ usage: (string &rest CHARACTERS) */)
p += CHAR_STRING (c, p);
}
return make_string_from_bytes ((char *) buf, n, p - buf);
str = make_string_from_bytes ((char *) buf, n, p - buf);
SAFE_FREE ();
return str;
}
DEFUN ("unibyte-string", Funibyte_string, Sunibyte_string, 0, MANY, 0,
......@@ -983,10 +988,13 @@ usage: (unibyte-string &rest BYTES) */)
int n;
Lisp_Object *args;
{
int i;
unsigned char *buf = (unsigned char *) alloca (n);
unsigned char *p = buf;
unsigned c;
int i, c;
unsigned char *buf, *p;
Lisp_Object str;
USE_SAFE_ALLOCA;
SAFE_ALLOCA (buf, unsigned char *, n);
p = buf;
for (i = 0; i < n; i++)
{
......@@ -997,7 +1005,9 @@ usage: (unibyte-string &rest BYTES) */)
*p++ = c;
}
return make_string_from_bytes ((char *) buf, n, p - buf);
str = make_string_from_bytes ((char *) buf, n, p - buf);
SAFE_FREE ();
return str;
}
DEFUN ("char-resolve-modifiers", Fchar_resolve_modifiers,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment