sas Fri Feb 16 14:53:18 2001 EDT Modified files: /php4/ext/ircg ircg.c ircg_scanner.c ircg_scanner.re Log: Move the separate entity encoding into the scanner. Otherwise, we cannot properly differentiate between (apparent) HTML which was generated by the IRC user vs. the scanner.
Index: php4/ext/ircg/ircg.c diff -u php4/ext/ircg/ircg.c:1.23 php4/ext/ircg/ircg.c:1.24 --- php4/ext/ircg/ircg.c:1.23 Fri Feb 16 11:01:22 2001 +++ php4/ext/ircg/ircg.c Fri Feb 16 14:53:18 2001 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: ircg.c,v 1.23 2001/02/16 19:01:22 sas Exp $ */ +/* $Id: ircg.c,v 1.24 2001/02/16 22:53:18 sas Exp $ */ #include "php.h" #include "php_ini.h" @@ -165,7 +165,6 @@ const char *p; char c; int mode = 0; - static smart_str new_msg; smart_str encoded_msg = {0}; result->len = 0; @@ -174,10 +173,7 @@ } if (msg) { - new_msg.len = 0; - ircg_mirc_color(msg, &new_msg); - encoded_msg.c = php_escape_html_entities(new_msg.c, new_msg.len, - &encoded_msg.len, 1, 1); + ircg_mirc_color(msg, &encoded_msg); } for (p = fmt; (c = *p); p++) { Index: php4/ext/ircg/ircg_scanner.c diff -u php4/ext/ircg/ircg_scanner.c:1.1 php4/ext/ircg/ircg_scanner.c:1.2 --- php4/ext/ircg/ircg_scanner.c:1.1 Fri Feb 16 11:01:22 2001 +++ php4/ext/ircg/ircg_scanner.c Fri Feb 16 14:53:18 2001 @@ -1,4 +1,4 @@ -/* Generated by re2c 0.5 on Fri Feb 16 19:55:49 2001 */ +/* Generated by re2c 0.5 on Fri Feb 16 23:53:05 2001 */ #line 1 "/home/sas/src/php4/ext/ircg/ircg_scanner.re" /* +----------------------------------------------------------------------+ @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: ircg_scanner.c,v 1.1 2001/02/16 19:01:22 sas Exp $ */ +/* $Id: ircg_scanner.c,v 1.2 2001/02/16 22:53:18 sas Exp $ */ #include <ext/standard/php_smart_str.h> #include <stdio.h> @@ -140,6 +140,11 @@ smart_str_appendl(ctx->result, start, YYCURSOR - start); } +static void add_entity(STD_PARA, const char *entity) +{ + smart_str_appends(ctx->result, entity); +} + void ircg_mirc_color(const char *msg, smart_str *result) { int mode = STATE_PLAIN; const char *end, *xp, *q, *start; @@ -157,6 +162,7 @@ while (1) { start = YYCURSOR; + switch (STATE) { case STATE_PLAIN: @@ -202,57 +208,74 @@ yy0: if((YYLIMIT - YYCURSOR) < 4) YYFILL(4); yych = *YYCURSOR; - if(yych <= '@'){ - if(yych <= '\000') goto yy7; - if(yych == '\003') goto yy4; - goto yy6; + if(yych <= '<'){ + if(yych <= '\003'){ + if(yych <= '\000') goto yy10; + if(yych <= '\002') goto yy6; + goto yy4; + } else { + if(yych == '&') goto yy7; + if(yych <= ';') goto yy6; + goto yy8; + } } else { - if(yych <= 'Z') goto yy2; - if(yych <= '`') goto yy6; - if(yych >= '{') goto yy6; + if(yych <= '@'){ + if(yych == '>') goto yy9; + goto yy6; + } else { + if(yych <= 'Z') goto yy2; + if(yych <= '`') goto yy6; + if(yych >= '{') goto yy6; + } } yy2: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); if(yych <= '@'){ if(yych <= '/') goto yy3; - if(yych <= ':') goto yy10; + if(yych <= ':') goto yy13; } else { - if(yych <= 'Z') goto yy10; + if(yych <= 'Z') goto yy13; if(yych <= '`') goto yy3; - if(yych <= 'z') goto yy10; + if(yych <= 'z') goto yy13; } yy3: -#line 172 +#line 178 { passthru(STD_ARGS); continue; } yy4: yych = *++YYCURSOR; yy5: -#line 171 +#line 177 { mctx.fg_code = mctx.bg_code = -1; STATE = STATE_COLOR_FG; continue; } yy6: yych = *++YYCURSOR; goto yy3; yy7: yych = *++YYCURSOR; -yy8: -#line 173 + goto yy3; +yy8: yych = *++YYCURSOR; + goto yy3; +yy9: yych = *++YYCURSOR; + goto yy3; +yy10: yych = *++YYCURSOR; +yy11: +#line 182 { goto stop; } -yy9: ++YYCURSOR; +yy12: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; -yy10: if(yybm[0+yych] & 128) goto yy9; - if(yych == ':') goto yy12; -yy11: YYCURSOR = YYMARKER; +yy13: if(yybm[0+yych] & 128) goto yy12; + if(yych == ':') goto yy15; +yy14: YYCURSOR = YYMARKER; switch(yyaccept){ case 0: goto yy3; } -yy12: yych = *++YYCURSOR; - if(yych != '/') goto yy11; -yy13: yych = *++YYCURSOR; - if(yych != '/') goto yy11; -yy14: yych = *++YYCURSOR; -yy15: -#line 170 +yy15: yych = *++YYCURSOR; + if(yych != '/') goto yy14; +yy16: yych = *++YYCURSOR; + if(yych != '/') goto yy14; +yy17: yych = *++YYCURSOR; +yy18: +#line 176 { handle_scheme(STD_ARGS); STATE = STATE_URL; continue; } } -#line 174 +#line 183 break; @@ -297,43 +320,43 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; - goto yy16; -yy17: ++YYCURSOR; -yy16: + goto yy19; +yy20: ++YYCURSOR; +yy19: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if(yych <= '>'){ if(yych <= '"'){ - if(yych != '!') goto yy20; + if(yych != '!') goto yy23; } else { - if(yych == '<') goto yy20; - if(yych >= '>') goto yy20; + if(yych == '<') goto yy23; + if(yych >= '>') goto yy23; } } else { if(yych <= '`'){ - if(yych <= 'Z') goto yy18; - if(yych != '_') goto yy20; + if(yych <= 'Z') goto yy21; + if(yych != '_') goto yy23; } else { - if(yych <= 'z') goto yy18; - if(yych != '~') goto yy20; + if(yych <= 'z') goto yy21; + if(yych != '~') goto yy23; } } -yy18: yych = *++YYCURSOR; - goto yy23; -yy19: -#line 182 +yy21: yych = *++YYCURSOR; + goto yy26; +yy22: +#line 191 { handle_url(STD_ARGS); STATE = STATE_PLAIN; continue; } -yy20: yych = *++YYCURSOR; -yy21: -#line 183 +yy23: yych = *++YYCURSOR; +yy24: +#line 192 { passthru(STD_ARGS); STATE = STATE_PLAIN; continue; } -yy22: ++YYCURSOR; +yy25: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; -yy23: if(yybm[0+yych] & 128) goto yy22; - goto yy19; +yy26: if(yybm[0+yych] & 128) goto yy25; + goto yy22; } -#line 184 +#line 193 break; @@ -343,27 +366,27 @@ { YYCTYPE yych; unsigned int yyaccept; - goto yy24; -yy25: ++YYCURSOR; -yy24: + goto yy27; +yy28: ++YYCURSOR; +yy27: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; - if(yych <= '/') goto yy28; - if(yych >= ':') goto yy28; -yy26: yych = *++YYCURSOR; - if(yych <= '/') goto yy27; - if(yych <= '9') goto yy30; -yy27: -#line 191 + if(yych <= '/') goto yy31; + if(yych >= ':') goto yy31; +yy29: yych = *++YYCURSOR; + if(yych <= '/') goto yy30; + if(yych <= '9') goto yy33; +yy30: +#line 200 { handle_color_digit(STD_ARGS, 0); STATE = STATE_COLOR_COMMA; continue; } -yy28: yych = *++YYCURSOR; -yy29: -#line 192 +yy31: yych = *++YYCURSOR; +yy32: +#line 201 { finish_color_stuff(STD_ARGS); passthru(STD_ARGS); STATE = STATE_PLAIN; continue; } -yy30: yych = *++YYCURSOR; - goto yy27; +yy33: yych = *++YYCURSOR; + goto yy30; } -#line 193 +#line 202 break; @@ -373,22 +396,22 @@ { YYCTYPE yych; unsigned int yyaccept; - goto yy31; -yy32: ++YYCURSOR; -yy31: + goto yy34; +yy35: ++YYCURSOR; +yy34: if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if(yych != ',') goto yy35; -yy33: yych = *++YYCURSOR; -yy34: -#line 200 + if(yych != ',') goto yy38; +yy36: yych = *++YYCURSOR; +yy37: +#line 209 { STATE = STATE_COLOR_BG; continue; } -yy35: yych = *++YYCURSOR; -yy36: -#line 201 +yy38: yych = *++YYCURSOR; +yy39: +#line 210 { YYCURSOR--; commit_color_stuff(STD_ARGS); STATE = STATE_PLAIN; continue; } } -#line 202 +#line 211 break; @@ -398,27 +421,27 @@ { YYCTYPE yych; unsigned int yyaccept; - goto yy37; -yy38: ++YYCURSOR; -yy37: + goto yy40; +yy41: ++YYCURSOR; +yy40: if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; - if(yych <= '/') goto yy41; - if(yych >= ':') goto yy41; -yy39: yych = *++YYCURSOR; - if(yych <= '/') goto yy40; - if(yych <= '9') goto yy43; -yy40: -#line 209 + if(yych <= '/') goto yy44; + if(yych >= ':') goto yy44; +yy42: yych = *++YYCURSOR; + if(yych <= '/') goto yy43; + if(yych <= '9') goto yy46; +yy43: +#line 218 { handle_color_digit(STD_ARGS, 1); commit_color_stuff(STD_ARGS); STATE = STATE_PLAIN; continue; } -yy41: yych = *++YYCURSOR; -yy42: -#line 210 +yy44: yych = *++YYCURSOR; +yy45: +#line 219 { commit_color_stuff(STD_ARGS); STATE = STATE_PLAIN; continue; } -yy43: yych = *++YYCURSOR; - goto yy40; +yy46: yych = *++YYCURSOR; + goto yy43; } -#line 211 +#line 220 break; } Index: php4/ext/ircg/ircg_scanner.re diff -u php4/ext/ircg/ircg_scanner.re:1.1 php4/ext/ircg/ircg_scanner.re:1.2 --- php4/ext/ircg/ircg_scanner.re:1.1 Fri Feb 16 11:01:22 2001 +++ php4/ext/ircg/ircg_scanner.re Fri Feb 16 14:53:18 2001 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: ircg_scanner.re,v 1.1 2001/02/16 19:01:22 sas Exp $ */ +/* $Id: ircg_scanner.re,v 1.2 2001/02/16 22:53:18 sas Exp $ */ #include <ext/standard/php_smart_str.h> #include <stdio.h> @@ -146,6 +146,11 @@ smart_str_appendl(ctx->result, start, YYCURSOR - start); } +static void add_entity(STD_PARA, const char *entity) +{ + smart_str_appends(ctx->result, entity); +} + void ircg_mirc_color(const char *msg, smart_str *result) { int mode = STATE_PLAIN; const char *end, *xp, *q, *start; @@ -163,6 +168,7 @@ while (1) { start = YYCURSOR; + switch (STATE) { case STATE_PLAIN: @@ -170,6 +176,9 @@ scheme "://" { handle_scheme(STD_ARGS); STATE = STATE_URL; continue; } coloresc { mctx.fg_code = mctx.bg_code = -1; STATE = STATE_COLOR_FG; continue; } anynoneof { passthru(STD_ARGS); continue; } + "<" { add_entity(STD_ARGS, "<"); continue; } + ">" { add_entity(STD_ARGS, ">"); continue; } + "&" { add_entity(STD_ARGS, "&"); continue; } eof { goto stop; } */ @@ -179,7 +188,7 @@ /*!re2c - [a-zA-Z0-9\./\-~_?=@&+#:;!*'()%,$]+ { handle_url(STD_ARGS); STATE = STATE_PLAIN; continue; } + [-a-zA-Z0-9~_?=.@&+/#:;!*'()%,$]+ { handle_url(STD_ARGS); STATE += STATE_PLAIN; continue; } any { passthru(STD_ARGS); STATE = STATE_PLAIN; continue; } */
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]