[kbd] [PATCH] src/libkeymap: add support for parsing more unicode values

Anisse Astier <[email protected]> Sat, 27 Feb 2021 15:36:11 +0100
Newsgroups dev.linux.lists.kbd
Message-ID <[email protected]>
The auto-generated (with ckbcomp) file fr-bepo_afnor did not load (even
partially), because of an U+1f12f (copyleft symbol) that is wrongly
parsed, generating this error message:

	too many (160) entries on one line

Fix libkeymap so that the keymap can be parsed, even if the offending
character won't be loaded because of the ushort limitation of the
kb_value KDSKBENT uapi.

It's better to have the keymap partially loaded than not at all.

Signed-off-by: Anisse Astier <[email protected]>
Fixes: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=968195
---
 src/libkeymap/analyze.l | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/libkeymap/analyze.l b/src/libkeymap/analyze.l
index 9e76eae..4bdffb4 100644
--- a/src/libkeymap/analyze.l
+++ b/src/libkeymap/analyze.l
@@ -319,7 +319,7 @@ Include			include[ \t]*
 Decimal			[1-9][0-9]*
 Octal			0[0-7]*
 Hex			0[xX][0-9a-fA-F]+
-Unicode			U\+([0-9a-fA-F]){4}
+Unicode			U\+([0-9a-fA-F]){4,6}
 Literal			[a-zA-Z][a-zA-Z_0-9]*
 Octa			([0-7]){1,3}
 Charset			charset|Charset|CharSet|CHARSET
@@ -404,7 +404,7 @@ To                      to|To|TO
 				if (parse_int(yyextra, yytext, yytext + 1, 16, &(yylval->num)) < 0)
 					return(ERROR);
 
-				if (yylval->num >= 0xf000) {
+				if (yylval->num >= 0x10ffff) {
 					ERR(yyextra, _("unicode keysym out of range: %s"),
 						yytext);
 					return(ERROR);
-- 
2.29.2