diff options
author | nicm <nicm> | 2019-05-29 10:08:36 +0000 |
---|---|---|
committer | nicm <nicm> | 2019-05-29 10:08:36 +0000 |
commit | a4424fbebf929f4ad742200365fc330a26a65d7f (patch) | |
tree | ca1fe1736e695e02ad075ac6079dc96b3ab6f145 /cmd-parse.y | |
parent | 580cd16f4c3474d7cae867b9b24f01665a268e9d (diff) | |
download | rtmux-a4424fbebf929f4ad742200365fc330a26a65d7f.tar.gz rtmux-a4424fbebf929f4ad742200365fc330a26a65d7f.tar.bz2 rtmux-a4424fbebf929f4ad742200365fc330a26a65d7f.zip |
Support \ooo escapes, from Avi Halachmi.
Diffstat (limited to 'cmd-parse.y')
-rw-r--r-- | cmd-parse.y | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/cmd-parse.y b/cmd-parse.y index f347280b..739ca56c 100644 --- a/cmd-parse.y +++ b/cmd-parse.y @@ -1083,12 +1083,34 @@ error: static int yylex_token_escape(char **buf, size_t *len) { - int ch, type; + int ch, type, o2, o3; u_int size, i, tmp; char s[9]; struct utf8_data ud; - switch (ch = yylex_getc()) { + ch = yylex_getc(); + + if (ch >= '4' && ch <= '7') { + yyerror("invalid octal escape"); + return (0); + } + if (ch >= '0' && ch <= '3') { + o2 = yylex_getc(); + if (o2 >= '0' && o2 <= '7') { + o3 = yylex_getc(); + if (o3 >= '0' && o3 <= '7') { + ch = 64 * (ch - '0') + + 8 * (o2 - '0') + + (o3 - '0'); + yylex_append1(buf, len, ch); + return (1); + } + } + yyerror("invalid octal escape"); + return (0); + } + + switch (ch) { case EOF: return (0); case 'e': |