From: Kenichi Handa Date: Fri, 16 May 1997 00:43:27 +0000 (+0000) Subject: (non_ascii_char_to_string): Signal error if the X-Git-Tag: emacs-20.1~2111 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=bd4c6dd02f88a13a645eac527c1b92c9fb5b1bdb;p=emacs.git (non_ascii_char_to_string): Signal error if the argument C is an invalid character code. (Fconcat_chars): Use alloca instead of malloc. --- diff --git a/src/charset.c b/src/charset.c index 3b599e1fe69..c0394110661 100644 --- a/src/charset.c +++ b/src/charset.c @@ -96,7 +96,8 @@ int _fetch_multibyte_char_len; is not a composite character, the multi-byte form is set in WORKBUF and STR points WORKBUF. The caller should allocate at least 4-byte area at WORKBUF in advance. Returns the length of the multi-byte - form. + form. If C is an invalid character to have a multi-byte form, + signal an error. Use macro `CHAR_STRING (C, WORKBUF, STR)' instead of calling this function directly if C can be an ASCII character. */ @@ -119,12 +120,16 @@ non_ascii_char_to_string (c, workbuf, str) } else { - *str = workbuf; - return 0; + error ("Invalid characer: %d", c); } } SPLIT_NON_ASCII_CHAR (c, charset, c1, c2); + if (!charset + || ! CHARSET_DEFINED_P (charset) + || c1 >= 0 && c1 < 32 + || c2 >= 0 && c2 < 32) + error ("Invalid characer: %d", c); *str = workbuf; *workbuf++ = CHARSET_LEADING_CODE_BASE (charset); @@ -926,7 +931,7 @@ DEFUN ("concat-chars", Fconcat_chars, Sconcat_chars, 1, MANY, 0, { int i; unsigned char *buf - = (unsigned char *) malloc (MAX_LENGTH_OF_MULTI_BYTE_FORM * n); + = (unsigned char *) alloca (MAX_LENGTH_OF_MULTI_BYTE_FORM * n); unsigned char *p = buf; Lisp_Object val; @@ -949,7 +954,6 @@ DEFUN ("concat-chars", Fconcat_chars, Sconcat_chars, 1, MANY, 0, } val = make_string (buf, p - buf); - free (buf); return val; }