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 \
|
||||
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 $@
|
||||
|
|
|
@ -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 {
|
||||
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(yybm[0+yych] & 64) goto yy39;
|
||||
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(yych <= '#') goto yy36;
|
||||
if(yych <= '=') goto yy42;
|
||||
yy36:yy37: ++YYCURSOR;
|
||||
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
||||
yych = *YYCURSOR;
|
||||
yy38: if(yych <= ' '){
|
||||
if(yych <= '\t'){
|
||||
yy38: if(yybm[0+yych] & 64) goto yy39;
|
||||
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;
|
||||
}
|
||||
}
|
||||
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'){
|
||||
yy40: if(yybm[0+yych] & 64) goto yy39;
|
||||
if(yych <= '"'){
|
||||
if(yych <= '\000') goto yy41;
|
||||
if(yych <= '\b') goto yy39;
|
||||
goto yy48;
|
||||
if(yych <= '!') goto yy48;
|
||||
goto yy50;
|
||||
} else {
|
||||
if(yych <= '\n') goto yy39;
|
||||
if(yych <= '\f') goto yy48;
|
||||
if(yych <= '\037') goto yy39;
|
||||
goto yy48;
|
||||
}
|
||||
} 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 yy42;
|
||||
}
|
||||
yy41:
|
||||
#line 150
|
||||
#line 151
|
||||
{ BEGIN(INITIAL); }
|
||||
yy42: ++YYCURSOR;
|
||||
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
||||
yych = *YYCURSOR;
|
||||
yy43: if(yych <= '\037'){
|
||||
if(yych <= '\t'){
|
||||
yy43: if(yybm[0+yych] & 128) goto yy42;
|
||||
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;
|
||||
}
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue