mirror of
https://github.com/php/php-src.git
synced 2025-08-18 15:08:55 +02:00
use static buffer for URLs instead of allocating/freeing memory
for each one
This commit is contained in:
parent
ac524d4b94
commit
96559e91fe
3 changed files with 118 additions and 121 deletions
|
@ -10,8 +10,8 @@ libphpext_standard_a_SOURCES=\
|
||||||
cyr_convert.c flock_compat.c crypt.c dl.c head.c post.c \
|
cyr_convert.c flock_compat.c crypt.c dl.c head.c post.c \
|
||||||
parsedate.y lcg.c url_scanner.c
|
parsedate.y lcg.c url_scanner.c
|
||||||
|
|
||||||
url_scanner.c: url_scanner.re
|
$(srcdir)/url_scanner.c: $(srcdir)/url_scanner.re
|
||||||
re2c -s $< > $@
|
re2c -b $< > $@
|
||||||
|
|
||||||
#number.o: number.c
|
#number.o: number.c
|
||||||
# $(CC) $(CFLAGS) -w@WARNING_LEVEL@ -c $< -o $@
|
# $(CC) $(CFLAGS) -w@WARNING_LEVEL@ -c $< -o $@
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* Generated by re2c 0.5 on Sun Sep 12 01:52:31 1999 */
|
/* Generated by re2c 0.5 on Sun Sep 12 15:02:30 1999 */
|
||||||
#line 1 "url_scanner.re"
|
#line 1 "../../../php4/ext/standard/url_scanner.re"
|
||||||
/*
|
/*
|
||||||
+----------------------------------------------------------------------+
|
+----------------------------------------------------------------------+
|
||||||
| PHP version 4.0 |
|
| PHP version 4.0 |
|
||||||
|
@ -24,6 +24,9 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#undef MIN
|
||||||
|
#define MIN(a,b) (a)<(b)?(a):(b)
|
||||||
|
|
||||||
#define YYCTYPE char
|
#define YYCTYPE char
|
||||||
#define YYCURSOR state->crs
|
#define YYCURSOR state->crs
|
||||||
#define YYLIMIT state->end
|
#define YYLIMIT state->end
|
||||||
|
@ -73,9 +76,9 @@ typedef struct {
|
||||||
|
|
||||||
static void screw_url(lexdata *state)
|
static void screw_url(lexdata *state)
|
||||||
{
|
{
|
||||||
char *url;
|
|
||||||
int len;
|
int len;
|
||||||
char buf[URLLEN];
|
char buf[URLLEN];
|
||||||
|
char url[URLLEN];
|
||||||
const char *p, *q;
|
const char *p, *q;
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
|
@ -97,8 +100,7 @@ static void screw_url(lexdata *state)
|
||||||
ATTACH(state->start, p-state->start);
|
ATTACH(state->start, p-state->start);
|
||||||
|
|
||||||
/* copy old URI */
|
/* copy old URI */
|
||||||
len = q - p;
|
len = MIN(q - p, sizeof(buf) - 1);
|
||||||
url = malloc(len + 1);
|
|
||||||
memcpy(url, p, len);
|
memcpy(url, p, len);
|
||||||
url[len] = '\0';
|
url[len] = '\0';
|
||||||
|
|
||||||
|
@ -106,7 +108,6 @@ static void screw_url(lexdata *state)
|
||||||
len = snprintf(buf, sizeof(buf), "%s%c%s", url,
|
len = snprintf(buf, sizeof(buf), "%s%c%s", url,
|
||||||
memchr(state->start, '?', len) ? '&' : '?',
|
memchr(state->start, '?', len) ? '&' : '?',
|
||||||
state->data);
|
state->data);
|
||||||
free(url);
|
|
||||||
|
|
||||||
/* attach new URI */
|
/* attach new URI */
|
||||||
ATTACH(buf, len);
|
ATTACH(buf, len);
|
||||||
|
@ -120,7 +121,7 @@ static void catchup(lexdata *state)
|
||||||
ATTACH(state->start, (state->crs - state->start));
|
ATTACH(state->start, (state->crs - state->start));
|
||||||
}
|
}
|
||||||
|
|
||||||
#line 133
|
#line 134
|
||||||
|
|
||||||
|
|
||||||
static void url_scanner(lexdata *state)
|
static void url_scanner(lexdata *state)
|
||||||
|
@ -132,13 +133,47 @@ static void url_scanner(lexdata *state)
|
||||||
{
|
{
|
||||||
YYCTYPE yych;
|
YYCTYPE yych;
|
||||||
unsigned int yyaccept;
|
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;
|
goto yy0;
|
||||||
yy1: ++YYCURSOR;
|
yy1: ++YYCURSOR;
|
||||||
yy0:
|
yy0:
|
||||||
if((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
|
if((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
|
||||||
yych = *YYCURSOR;
|
yych = *YYCURSOR;
|
||||||
|
if(yybm[0+yych] & 64) goto yy4;
|
||||||
if(yych <= '\000') goto yy7;
|
if(yych <= '\000') goto yy7;
|
||||||
if(yych != '<') goto yy4;
|
|
||||||
yy2: yych = *++YYCURSOR;
|
yy2: yych = *++YYCURSOR;
|
||||||
if(yych <= 'F'){
|
if(yych <= 'F'){
|
||||||
if(yych == 'A') goto yy9;
|
if(yych == 'A') goto yy9;
|
||||||
|
@ -153,14 +188,13 @@ yy2: yych = *++YYCURSOR;
|
||||||
yy3:yy4: ++YYCURSOR;
|
yy3:yy4: ++YYCURSOR;
|
||||||
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
||||||
yych = *YYCURSOR;
|
yych = *YYCURSOR;
|
||||||
yy5: if(yych <= '\000') goto yy6;
|
yy5: if(yybm[0+yych] & 64) goto yy4;
|
||||||
if(yych != '<') goto yy4;
|
|
||||||
yy6:
|
yy6:
|
||||||
#line 144
|
#line 145
|
||||||
{ BEGIN(INITIAL); }
|
{ BEGIN(INITIAL); }
|
||||||
yy7: yych = *++YYCURSOR;
|
yy7: yych = *++YYCURSOR;
|
||||||
yy8:
|
yy8:
|
||||||
#line 145
|
#line 146
|
||||||
{ FINISH; }
|
{ FINISH; }
|
||||||
yy9: yych = *++YYCURSOR;
|
yy9: yych = *++YYCURSOR;
|
||||||
if(yych == 'H') goto yy3;
|
if(yych == 'H') goto yy3;
|
||||||
|
@ -185,23 +219,9 @@ yy14: yych = *++YYCURSOR;
|
||||||
yy15: ++YYCURSOR;
|
yy15: ++YYCURSOR;
|
||||||
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
||||||
yych = *YYCURSOR;
|
yych = *YYCURSOR;
|
||||||
yy16: if(yych <= '\037'){
|
yy16: if(yybm[0+yych] & 128) goto yy15;
|
||||||
if(yych <= '\t'){
|
if(yych == 'S') goto yy17;
|
||||||
if(yych <= '\b') goto yy3;
|
if(yych != 's') 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
yy17: yych = *++YYCURSOR;
|
yy17: yych = *++YYCURSOR;
|
||||||
if(yych == 'R') goto yy18;
|
if(yych == 'R') goto yy18;
|
||||||
if(yych != 'r') goto yy3;
|
if(yych != 'r') goto yy3;
|
||||||
|
@ -233,7 +253,7 @@ yy22: if(yych <= '\n'){
|
||||||
if(yych == ' ') goto yy21;
|
if(yych == ' ') goto yy21;
|
||||||
}
|
}
|
||||||
yy23:
|
yy23:
|
||||||
#line 142
|
#line 143
|
||||||
{ BEGIN(REF); }
|
{ BEGIN(REF); }
|
||||||
yy24: ++YYCURSOR;
|
yy24: ++YYCURSOR;
|
||||||
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
||||||
|
@ -289,116 +309,92 @@ yy32: if(yych <= '\n'){
|
||||||
if(yych == ' ') goto yy31;
|
if(yych == ' ') goto yy31;
|
||||||
}
|
}
|
||||||
yy33:
|
yy33:
|
||||||
#line 143
|
#line 144
|
||||||
{ BEGIN(REF); }
|
{ BEGIN(REF); }
|
||||||
}
|
}
|
||||||
#line 146
|
#line 147
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case REF:
|
case REF:
|
||||||
{
|
{
|
||||||
YYCTYPE yych;
|
YYCTYPE yych;
|
||||||
unsigned int yyaccept;
|
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;
|
goto yy34;
|
||||||
yy35: ++YYCURSOR;
|
yy35: ++YYCURSOR;
|
||||||
yy34:
|
yy34:
|
||||||
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
||||||
yych = *YYCURSOR;
|
yych = *YYCURSOR;
|
||||||
if(yych <= ' '){
|
if(yybm[0+yych] & 64) goto yy39;
|
||||||
if(yych <= '\t'){
|
if(yych <= '\000') goto yy36;
|
||||||
if(yych <= '\000') goto yy36;
|
if(yych <= '"') goto yy37;
|
||||||
if(yych <= '\b') goto yy39;
|
if(yych <= '#') goto yy36;
|
||||||
goto yy37;
|
if(yych <= '=') goto yy42;
|
||||||
} 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
yy36:yy37: ++YYCURSOR;
|
yy36:yy37: ++YYCURSOR;
|
||||||
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
||||||
yych = *YYCURSOR;
|
yych = *YYCURSOR;
|
||||||
yy38: if(yych <= ' '){
|
yy38: if(yybm[0+yych] & 64) goto yy39;
|
||||||
if(yych <= '\t'){
|
if(yych <= '\000') goto yy36;
|
||||||
if(yych <= '\000') goto yy36;
|
if(yych <= '!') goto yy37;
|
||||||
if(yych >= '\t') goto yy37;
|
if(yych == ':') goto yy42;
|
||||||
} else {
|
goto yy36;
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
yy39: ++YYCURSOR;
|
yy39: ++YYCURSOR;
|
||||||
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
||||||
yych = *YYCURSOR;
|
yych = *YYCURSOR;
|
||||||
yy40: if(yych <= ' '){
|
yy40: if(yybm[0+yych] & 64) goto yy39;
|
||||||
if(yych <= '\t'){
|
if(yych <= '"'){
|
||||||
if(yych <= '\000') goto yy41;
|
if(yych <= '\000') goto yy41;
|
||||||
if(yych <= '\b') goto yy39;
|
if(yych <= '!') goto yy48;
|
||||||
goto yy48;
|
goto yy50;
|
||||||
} else {
|
|
||||||
if(yych <= '\n') goto yy39;
|
|
||||||
if(yych <= '\f') goto yy48;
|
|
||||||
if(yych <= '\037') goto yy39;
|
|
||||||
goto yy48;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if(yych <= '9'){
|
if(yych <= '#') goto yy51;
|
||||||
if(yych <= '!') goto yy39;
|
if(yych <= '=') goto yy42;
|
||||||
if(yych <= '"') goto yy50;
|
|
||||||
if(yych <= '#') goto yy51;
|
|
||||||
goto yy39;
|
|
||||||
} else {
|
|
||||||
if(yych <= ':') goto yy42;
|
|
||||||
if(yych != '>') goto yy39;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
yy41:
|
yy41:
|
||||||
#line 150
|
#line 151
|
||||||
{ BEGIN(INITIAL); }
|
{ BEGIN(INITIAL); }
|
||||||
yy42: ++YYCURSOR;
|
yy42: ++YYCURSOR;
|
||||||
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
||||||
yych = *YYCURSOR;
|
yych = *YYCURSOR;
|
||||||
yy43: if(yych <= '\037'){
|
yy43: if(yybm[0+yych] & 128) goto yy42;
|
||||||
if(yych <= '\t'){
|
if(yych <= '\000') goto yy44;
|
||||||
if(yych <= '\000') goto yy44;
|
if(yych <= '!') goto yy45;
|
||||||
if(yych <= '\b') goto yy42;
|
if(yych <= '"') goto yy47;
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
yy44:
|
yy44:
|
||||||
#line 152
|
#line 153
|
||||||
{
|
{
|
||||||
/* don't modify absolute links */
|
/* don't modify absolute links */
|
||||||
state->state = INITIAL; BEGIN(INITIAL);
|
state->state = INITIAL; BEGIN(INITIAL);
|
||||||
|
@ -439,10 +435,10 @@ yy50: yych = *++YYCURSOR;
|
||||||
goto yy41;
|
goto yy41;
|
||||||
yy51: yych = *++YYCURSOR;
|
yy51: yych = *++YYCURSOR;
|
||||||
yy52: YYCURSOR -= 1;
|
yy52: YYCURSOR -= 1;
|
||||||
#line 151
|
#line 152
|
||||||
{ BEGIN(INITIAL); }
|
{ BEGIN(INITIAL); }
|
||||||
}
|
}
|
||||||
#line 156
|
#line 157
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,9 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#undef MIN
|
||||||
|
#define MIN(a,b) (a)<(b)?(a):(b)
|
||||||
|
|
||||||
#define YYCTYPE char
|
#define YYCTYPE char
|
||||||
#define YYCURSOR state->crs
|
#define YYCURSOR state->crs
|
||||||
#define YYLIMIT state->end
|
#define YYLIMIT state->end
|
||||||
|
@ -71,9 +74,9 @@ typedef struct {
|
||||||
|
|
||||||
static void screw_url(lexdata *state)
|
static void screw_url(lexdata *state)
|
||||||
{
|
{
|
||||||
char *url;
|
|
||||||
int len;
|
int len;
|
||||||
char buf[URLLEN];
|
char buf[URLLEN];
|
||||||
|
char url[URLLEN];
|
||||||
const char *p, *q;
|
const char *p, *q;
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
|
@ -95,8 +98,7 @@ static void screw_url(lexdata *state)
|
||||||
ATTACH(state->start, p-state->start);
|
ATTACH(state->start, p-state->start);
|
||||||
|
|
||||||
/* copy old URI */
|
/* copy old URI */
|
||||||
len = q - p;
|
len = MIN(q - p, sizeof(buf) - 1);
|
||||||
url = malloc(len + 1);
|
|
||||||
memcpy(url, p, len);
|
memcpy(url, p, len);
|
||||||
url[len] = '\0';
|
url[len] = '\0';
|
||||||
|
|
||||||
|
@ -104,7 +106,6 @@ static void screw_url(lexdata *state)
|
||||||
len = snprintf(buf, sizeof(buf), "%s%c%s", url,
|
len = snprintf(buf, sizeof(buf), "%s%c%s", url,
|
||||||
memchr(state->start, '?', len) ? '&' : '?',
|
memchr(state->start, '?', len) ? '&' : '?',
|
||||||
state->data);
|
state->data);
|
||||||
free(url);
|
|
||||||
|
|
||||||
/* attach new URI */
|
/* attach new URI */
|
||||||
ATTACH(buf, len);
|
ATTACH(buf, len);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue