diff options
| author | Eli Zaretskii | 2011-04-23 13:33:28 +0300 |
|---|---|---|
| committer | Eli Zaretskii | 2011-04-23 13:33:28 +0300 |
| commit | e6c3da2065ac72cc4e1a2bef22d367cd75401892 (patch) | |
| tree | 1f6fcbee1e12f63096d2221a89f5436b831862a9 /src/charset.c | |
| parent | 4ffd0d6b569d252e4e807d4e9c9d6a5bd5b08640 (diff) | |
| download | emacs-e6c3da2065ac72cc4e1a2bef22d367cd75401892.tar.gz emacs-e6c3da2065ac72cc4e1a2bef22d367cd75401892.zip | |
Fix doprnt so it could be used safely in `verror'. (Bug#8435)
src/doprnt.c: Include limits.h.
(SIZE_MAX): New macro.
(doprnt): Return a size_t value. 2nd arg is now size_t. Many
local variables are now size_t instead of int or unsigned.
Improve overflow protection. Support `l' modifier for integer
conversions. Support %l conversion. Don't assume an EMACS_INT
argument for integer conversions and for %c.
src/lisp.h (doprnt): Restore prototype.
src/makefile.w32-in ($(BLD)/callint.$(O)): Depend on
$(SRC)/character.h.
src/Makefile.in (base_obj): Add back doprnt.o.
src/deps.mk (doprnt.o): Add back prerequisites.
(callint.o): Depend on character.h.
src/eval.c (internal_lisp_condition_case): Include the handler
representation in the error message.
(verror): Call doprnt instead of vsnprintf. Fix an off-by-one bug
when breaking from the loop.
src/xdisp.c (vmessage): Call doprnt instead of vsnprintf.
src/callint.c (Fcall_interactively): When displaying error message
about invalid control letter, pass the character's codepoint, not
a pointer to its multibyte form. Improve display of the character
in octal and display also its hex code.
src/character.c (char_string): Use %x to display the (unsigned)
codepoint of an invalid character, to avoid displaying a bogus
negative value.
src/font.c (check_otf_features): Pass SDATA of SYMBOL_NAME to
`error', not SYMBOL_NAME itself.
src/coding.c (Fencode_sjis_char, Fencode_big5_char): Use %c for
character arguments to `error'.
src/charset.c (check_iso_charset_parameter): Fix incorrect argument
to `error' in error message about FINAL_CHAR argument. Make sure
FINAL_CHAR is a character, and use %c when it is passed as
argument to `error'.
Diffstat (limited to 'src/charset.c')
| -rw-r--r-- | src/charset.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/src/charset.c b/src/charset.c index c4699dcb0a7..e7435c292e2 100644 --- a/src/charset.c +++ b/src/charset.c | |||
| @@ -1436,7 +1436,7 @@ check_iso_charset_parameter (Lisp_Object dimension, Lisp_Object chars, Lisp_Obje | |||
| 1436 | { | 1436 | { |
| 1437 | CHECK_NATNUM (dimension); | 1437 | CHECK_NATNUM (dimension); |
| 1438 | CHECK_NATNUM (chars); | 1438 | CHECK_NATNUM (chars); |
| 1439 | CHECK_NATNUM (final_char); | 1439 | CHECK_CHARACTER (final_char); |
| 1440 | 1440 | ||
| 1441 | if (XINT (dimension) > 3) | 1441 | if (XINT (dimension) > 3) |
| 1442 | error ("Invalid DIMENSION %"pEd", it should be 1, 2, or 3", | 1442 | error ("Invalid DIMENSION %"pEd", it should be 1, 2, or 3", |
| @@ -1444,12 +1444,8 @@ check_iso_charset_parameter (Lisp_Object dimension, Lisp_Object chars, Lisp_Obje | |||
| 1444 | if (XINT (chars) != 94 && XINT (chars) != 96) | 1444 | if (XINT (chars) != 94 && XINT (chars) != 96) |
| 1445 | error ("Invalid CHARS %"pEd", it should be 94 or 96", XINT (chars)); | 1445 | error ("Invalid CHARS %"pEd", it should be 94 or 96", XINT (chars)); |
| 1446 | if (XINT (final_char) < '0' || XINT (final_char) > '~') | 1446 | if (XINT (final_char) < '0' || XINT (final_char) > '~') |
| 1447 | { | 1447 | error ("Invalid FINAL-CHAR %c, it should be `0'..`~'", |
| 1448 | unsigned char str[MAX_MULTIBYTE_LENGTH + 1]; | 1448 | (int)XINT (final_char)); |
| 1449 | int len = CHAR_STRING (XINT (chars), str); | ||
| 1450 | str[len] = '\0'; | ||
| 1451 | error ("Invalid FINAL-CHAR %s, it should be `0'..`~'", str); | ||
| 1452 | } | ||
| 1453 | } | 1449 | } |
| 1454 | 1450 | ||
| 1455 | 1451 | ||