diff options
author | Peter Breitenlohner <peb@mppmu.mpg.de> | 2009-07-16 07:51:07 +0000 |
---|---|---|
committer | Peter Breitenlohner <peb@mppmu.mpg.de> | 2009-07-16 07:51:07 +0000 |
commit | 7a00b27579c631f2389ee63ed38cea662ec78da1 (patch) | |
tree | e3661ae5f38cf4fc3b21723356a598c6db80f210 /Build/source/texk/web2c/omegafonts/pl-lexer.l | |
parent | b0ee6760d9a625a2e5a95d4dcad6145602743019 (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.l | 27 |
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); } |