Mercurial > hg > xemacs-beta
diff src/lread.c @ 4483:7869173584fc
Error on over-long hex character escapes.
2008-07-16 Aidan Kehoe <kehoea@parhasard.net>
* lread.c (read_escape):
Error if we're handed an over-long hex character escape, something
which arises reasonably frequently in code written for GNU.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Wed, 16 Jul 2008 22:36:03 +0200 |
parents | ac6231e0c1df |
children | 1e3cf11fa27d |
line wrap: on
line diff
--- a/src/lread.c Thu Jul 10 23:37:52 2008 +0200 +++ b/src/lread.c Wed Jul 16 22:36:03 2008 +0200 @@ -1855,6 +1855,28 @@ break; } } + + if (count == 3) + { + c = readchar (readcharfun); + if ((c >= '0' && c <= '9') || + (c >= 'a' && c <= 'f') || + (c >= 'A' && c <= 'F')) + { + Lisp_Object args[2]; + + if (c >= '0' && c <= '9') i = (i << 4) + (c - '0'); + else if (c >= 'a' && c <= 'f') i = (i << 4) + (c - 'a') + 10; + else if (c >= 'A' && c <= 'F') i = (i << 4) + (c - 'A') + 10; + + args[0] = build_string ("?\\x%x"); + args[1] = make_int (i); + syntax_error ("Overlong hex character escape", + Fformat (2, args)); + } + unreadchar (readcharfun, c); + } + return i; } case 'U':