summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/omegafonts/pl-lexer.l
diff options
context:
space:
mode:
authorPeter Breitenlohner <peb@mppmu.mpg.de>2009-07-16 07:51:07 +0000
committerPeter Breitenlohner <peb@mppmu.mpg.de>2009-07-16 07:51:07 +0000
commit7a00b27579c631f2389ee63ed38cea662ec78da1 (patch)
treee3661ae5f38cf4fc3b21723356a598c6db80f210 /Build/source/texk/web2c/omegafonts/pl-lexer.l
parentb0ee6760d9a625a2e5a95d4dcad6145602743019 (diff)
texk/web2c/omegafonts: fix handling of DVI specials in char packets
git-svn-id: svn://tug.org/texlive/trunk@14275 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/omegafonts/pl-lexer.l')
-rw-r--r--Build/source/texk/web2c/omegafonts/pl-lexer.l27
1 files changed, 22 insertions, 5 deletions
diff --git a/Build/source/texk/web2c/omegafonts/pl-lexer.l b/Build/source/texk/web2c/omegafonts/pl-lexer.l
index 5eba855a25a..bd17b8c2500 100644
--- a/Build/source/texk/web2c/omegafonts/pl-lexer.l
+++ b/Build/source/texk/web2c/omegafonts/pl-lexer.l
@@ -79,7 +79,6 @@ octnumber O{ws}[0-7]+
decnumber D{ws}[0-9]+
realnumber R[ \t+-]+[0-9]*("."[0-9]*){0,1}
charnumber C{ws}.
-hexstring ([A-F0-9][A-F0-9])*
%%
@@ -110,7 +109,7 @@ SPECIAL {scan_string("SPECIAL", KEEP_ALL, 0);
COMMENT {scan_string("COMMENT", KEEP_NONE, 0);
return(COMMENT); }
-SPECIALHEX{ws}{hexstring} {scan_hex_string(); return(SPECIALHEX); }
+SPECIALHEX {scan_hex_string(); return(SPECIALHEX); }
SEVENBITSAFEFLAG{ws}TRUE {yylval.yint=1; return(SEVENBITSAFEFLAG); }
@@ -479,8 +478,26 @@ scan_string(char *attribute, unsigned keep, unsigned length)
static void
scan_hex_string(void)
{
- register unsigned i=10;
+ register unsigned c, saved_ptr = 0;
+ unsigned error_msg = FALSE;
- while ((yytext[i]==' ') || (yytext[i]=='\t')) i++;
- yylval.ystring = xstrdup(yytext+i);
+ while ((c = input()) != EOF) {
+ if (((c >= '0') && (c <= '9')) || ((c >= 'A') && (c <= 'F'))) {
+ if (saved_ptr<(MAX_PTR-3))
+ saved_text[saved_ptr++] = c;
+ else if (error_msg == FALSE) {
+ lex_error_1("SPECIALHEX string longer than %d characters; truncating",
+ MAX_PTR);
+ error_msg = TRUE;
+ }
+ } else if (c == '\n') {
+ line_number++;
+ } else if ((c != ' ') && (c != '\t')) {
+ unput(c);
+ break;
+ }
+ }
+ if (c == EOF) fatal_error_0("EOF while scanning SPECIALHEX");
+ saved_text[saved_ptr++] = '\0';
+ yylval.ystring = xstrdup(saved_text);
}