summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/standard/Makefile.am4
-rw-r--r--ext/standard/url_scanner.c226
-rw-r--r--ext/standard/url_scanner.re9
3 files changed, 118 insertions, 121 deletions
diff --git a/ext/standard/Makefile.am b/ext/standard/Makefile.am
index e900c01605..e6fe055859 100644
--- a/ext/standard/Makefile.am
+++ b/ext/standard/Makefile.am
@@ -10,8 +10,8 @@ libphpext_standard_a_SOURCES=\
cyr_convert.c flock_compat.c crypt.c dl.c head.c post.c \
parsedate.y lcg.c url_scanner.c
-url_scanner.c: url_scanner.re
- re2c -s $< > $@
+$(srcdir)/url_scanner.c: $(srcdir)/url_scanner.re
+ re2c -b $< > $@
#number.o: number.c
# $(CC) $(CFLAGS) -w@WARNING_LEVEL@ -c $< -o $@
diff --git a/ext/standard/url_scanner.c b/ext/standard/url_scanner.c
index 4e87233535..a52d095793 100644
--- a/ext/standard/url_scanner.c
+++ b/ext/standard/url_scanner.c
@@ -1,5 +1,5 @@
-/* Generated by re2c 0.5 on Sun Sep 12 01:52:31 1999 */
-#line 1 "url_scanner.re"
+/* Generated by re2c 0.5 on Sun Sep 12 15:02:30 1999 */
+#line 1 "../../../php4/ext/standard/url_scanner.re"
/*
+----------------------------------------------------------------------+
| PHP version 4.0 |
@@ -24,6 +24,9 @@
#include <stdlib.h>
#include <string.h>
+#undef MIN
+#define MIN(a,b) (a)<(b)?(a):(b)
+
#define YYCTYPE char
#define YYCURSOR state->crs
#define YYLIMIT state->end
@@ -73,9 +76,9 @@ typedef struct {
static void screw_url(lexdata *state)
{
- char *url;
int len;
char buf[URLLEN];
+ char url[URLLEN];
const char *p, *q;
char c;
@@ -97,8 +100,7 @@ static void screw_url(lexdata *state)
ATTACH(state->start, p-state->start);
/* copy old URI */
- len = q - p;
- url = malloc(len + 1);
+ len = MIN(q - p, sizeof(buf) - 1);
memcpy(url, p, len);
url[len] = '\0';
@@ -106,7 +108,6 @@ static void screw_url(lexdata *state)
len = snprintf(buf, sizeof(buf), "%s%c%s", url,
memchr(state->start, '?', len) ? '&' : '?',
state->data);
- free(url);
/* attach new URI */
ATTACH(buf, len);
@@ -120,7 +121,7 @@ static void catchup(lexdata *state)
ATTACH(state->start, (state->crs - state->start));
}
-#line 133
+#line 134
static void url_scanner(lexdata *state)
@@ -132,13 +133,47 @@ static void url_scanner(lexdata *state)
{
YYCTYPE yych;
unsigned int yyaccept;
+ static unsigned char yybm[] = {
+ 0, 64, 64, 64, 64, 64, 64, 64,
+ 64, 192, 64, 192, 192, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 192, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 0, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ };
goto yy0;
yy1: ++YYCURSOR;
yy0:
if((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
yych = *YYCURSOR;
+ if(yybm[0+yych] & 64) goto yy4;
if(yych <= '\000') goto yy7;
- if(yych != '<') goto yy4;
yy2: yych = *++YYCURSOR;
if(yych <= 'F'){
if(yych == 'A') goto yy9;
@@ -153,14 +188,13 @@ yy2: yych = *++YYCURSOR;
yy3:yy4: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
-yy5: if(yych <= '\000') goto yy6;
- if(yych != '<') goto yy4;
+yy5: if(yybm[0+yych] & 64) goto yy4;
yy6:
-#line 144
+#line 145
{ BEGIN(INITIAL); }
yy7: yych = *++YYCURSOR;
yy8:
-#line 145
+#line 146
{ FINISH; }
yy9: yych = *++YYCURSOR;
if(yych == 'H') goto yy3;
@@ -185,23 +219,9 @@ yy14: yych = *++YYCURSOR;
yy15: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
-yy16: if(yych <= '\037'){
- if(yych <= '\t'){
- if(yych <= '\b') goto yy3;
- goto yy15;
- } else {
- if(yych <= '\n') goto yy3;
- if(yych <= '\f') goto yy15;
- goto yy3;
- }
- } else {
- if(yych <= 'S'){
- if(yych <= ' ') goto yy15;
- if(yych <= 'R') goto yy3;
- } else {
- if(yych != 's') goto yy3;
- }
- }
+yy16: if(yybm[0+yych] & 128) goto yy15;
+ if(yych == 'S') goto yy17;
+ if(yych != 's') goto yy3;
yy17: yych = *++YYCURSOR;
if(yych == 'R') goto yy18;
if(yych != 'r') goto yy3;
@@ -233,7 +253,7 @@ yy22: if(yych <= '\n'){
if(yych == ' ') goto yy21;
}
yy23:
-#line 142
+#line 143
{ BEGIN(REF); }
yy24: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
@@ -289,116 +309,92 @@ yy32: if(yych <= '\n'){
if(yych == ' ') goto yy31;
}
yy33:
-#line 143
+#line 144
{ BEGIN(REF); }
}
-#line 146
+#line 147
break;
case REF:
{
YYCTYPE yych;
unsigned int yyaccept;
+ static unsigned char yybm[] = {
+ 0, 192, 192, 192, 192, 192, 192, 192,
+ 192, 32, 192, 32, 32, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 32, 192, 0, 0, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 128, 192, 192, 192, 0, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ 192, 192, 192, 192, 192, 192, 192, 192,
+ };
goto yy34;
yy35: ++YYCURSOR;
yy34:
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
- if(yych <= ' '){
- if(yych <= '\t'){
- if(yych <= '\000') goto yy36;
- if(yych <= '\b') goto yy39;
- goto yy37;
- } else {
- if(yych <= '\n') goto yy39;
- if(yych <= '\f') goto yy37;
- if(yych <= '\037') goto yy39;
- goto yy37;
- }
- } else {
- if(yych <= '9'){
- if(yych <= '!') goto yy39;
- if(yych <= '"') goto yy37;
- if(yych >= '$') goto yy39;
- } else {
- if(yych <= ':') goto yy42;
- if(yych != '>') goto yy39;
- }
- }
+ if(yybm[0+yych] & 64) goto yy39;
+ if(yych <= '\000') goto yy36;
+ if(yych <= '"') goto yy37;
+ if(yych <= '#') goto yy36;
+ if(yych <= '=') goto yy42;
yy36:yy37: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
-yy38: if(yych <= ' '){
- if(yych <= '\t'){
- if(yych <= '\000') goto yy36;
- if(yych >= '\t') goto yy37;
- } else {
- if(yych <= '\n') goto yy39;
- if(yych <= '\f') goto yy37;
- if(yych >= ' ') goto yy37;
- }
- } else {
- if(yych <= '9'){
- if(yych <= '!') goto yy39;
- if(yych <= '#') goto yy36;
- } else {
- if(yych <= ':') goto yy42;
- if(yych == '>') goto yy36;
- }
- }
+yy38: if(yybm[0+yych] & 64) goto yy39;
+ if(yych <= '\000') goto yy36;
+ if(yych <= '!') goto yy37;
+ if(yych == ':') goto yy42;
+ goto yy36;
yy39: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
-yy40: if(yych <= ' '){
- if(yych <= '\t'){
- if(yych <= '\000') goto yy41;
- if(yych <= '\b') goto yy39;
- goto yy48;
- } else {
- if(yych <= '\n') goto yy39;
- if(yych <= '\f') goto yy48;
- if(yych <= '\037') goto yy39;
- goto yy48;
- }
+yy40: if(yybm[0+yych] & 64) goto yy39;
+ if(yych <= '"'){
+ if(yych <= '\000') goto yy41;
+ if(yych <= '!') goto yy48;
+ goto yy50;
} else {
- if(yych <= '9'){
- if(yych <= '!') goto yy39;
- if(yych <= '"') goto yy50;
- if(yych <= '#') goto yy51;
- goto yy39;
- } else {
- if(yych <= ':') goto yy42;
- if(yych != '>') goto yy39;
- }
+ if(yych <= '#') goto yy51;
+ if(yych <= '=') goto yy42;
}
yy41:
-#line 150
+#line 151
{ BEGIN(INITIAL); }
yy42: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
-yy43: if(yych <= '\037'){
- if(yych <= '\t'){
- if(yych <= '\000') goto yy44;
- if(yych <= '\b') goto yy42;
- goto yy45;
- } else {
- if(yych <= '\n') goto yy42;
- if(yych <= '\f') goto yy45;
- goto yy42;
- }
- } else {
- if(yych <= '"'){
- if(yych <= ' ') goto yy45;
- if(yych <= '!') goto yy42;
- goto yy47;
- } else {
- if(yych <= '#') goto yy44;
- if(yych != '>') goto yy42;
- }
- }
+yy43: if(yybm[0+yych] & 128) goto yy42;
+ if(yych <= '\000') goto yy44;
+ if(yych <= '!') goto yy45;
+ if(yych <= '"') goto yy47;
yy44:
-#line 152
+#line 153
{
/* don't modify absolute links */
state->state = INITIAL; BEGIN(INITIAL);
@@ -439,10 +435,10 @@ yy50: yych = *++YYCURSOR;
goto yy41;
yy51: yych = *++YYCURSOR;
yy52: YYCURSOR -= 1;
-#line 151
+#line 152
{ BEGIN(INITIAL); }
}
-#line 156
+#line 157
break;
}
diff --git a/ext/standard/url_scanner.re b/ext/standard/url_scanner.re
index 7a51fc2785..bc14c2a7df 100644
--- a/ext/standard/url_scanner.re
+++ b/ext/standard/url_scanner.re
@@ -22,6 +22,9 @@
#include <stdlib.h>
#include <string.h>
+#undef MIN
+#define MIN(a,b) (a)<(b)?(a):(b)
+
#define YYCTYPE char
#define YYCURSOR state->crs
#define YYLIMIT state->end
@@ -71,9 +74,9 @@ typedef struct {
static void screw_url(lexdata *state)
{
- char *url;
int len;
char buf[URLLEN];
+ char url[URLLEN];
const char *p, *q;
char c;
@@ -95,8 +98,7 @@ static void screw_url(lexdata *state)
ATTACH(state->start, p-state->start);
/* copy old URI */
- len = q - p;
- url = malloc(len + 1);
+ len = MIN(q - p, sizeof(buf) - 1);
memcpy(url, p, len);
url[len] = '\0';
@@ -104,7 +106,6 @@ static void screw_url(lexdata *state)
len = snprintf(buf, sizeof(buf), "%s%c%s", url,
memchr(state->start, '?', len) ? '&' : '?',
state->data);
- free(url);
/* attach new URI */
ATTACH(buf, len);