summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHartmut Holzgraefe <hholzgra@php.net>2000-06-23 05:42:41 +0000
committerHartmut Holzgraefe <hholzgra@php.net>2000-06-23 05:42:41 +0000
commit234f02972733cb6ad7c1c4bdb0ee10b39b67b0aa (patch)
tree86f6b72de6abd8bc95c0144fc816685d5d147962
parent388f7cdccc34f6189a94ef6333870fd19ae8a75e (diff)
downloadphp-git-234f02972733cb6ad7c1c4bdb0ee10b39b67b0aa.tar.gz
this change should solve all problems regarding trans_sid_id and
"empty" href urls like "", "#name", "?param=val" ...
-rw-r--r--ext/standard/url_scanner.c16
-rw-r--r--ext/standard/url_scanner.re8
2 files changed, 19 insertions, 5 deletions
diff --git a/ext/standard/url_scanner.c b/ext/standard/url_scanner.c
index c5285bb996..aa6374c67c 100644
--- a/ext/standard/url_scanner.c
+++ b/ext/standard/url_scanner.c
@@ -87,9 +87,13 @@ static void screw_url(lexdata *state)
const char *p, *q;
char c;
+
/* search outer limits for URI */
for(p = state->start; p < state->crs && (c = *p); p++)
- if(c != '"' && c != ' ') break;
+ if(!isspace(c)) break;
+ if(c=='"') p++;
+ for(; p < state->crs && (c = *p); p++)
+ if(!isspace(c)) break;
/*
* we look at q-1, because q points to the character behind the last
@@ -98,14 +102,20 @@ static void screw_url(lexdata *state)
*/
for(q = state->crs; q > state->start && (c = *(q-1)); q--)
- if(c != '"' && c != ' ') break;
+ if(!isspace(c)) break;
+ if(c=='"') q--;
+ for(; q > state->start && (c = *(q-1)); q--)
+ if(!isspace(c)) break;
+
+ if(q<p) { p=state->start; q=state->crs; }
/* attach beginning */
-
ATTACH(state->start, p-state->start);
/* copy old URI */
len = MIN(q - p, sizeof(buf) - 1);
+ php_error(E_WARNING,"%p - %p - %p - %p - %d - %d",state->start,state->crs,p,q,q-p,len);
+
memcpy(url, p, len);
url[len] = '\0';
diff --git a/ext/standard/url_scanner.re b/ext/standard/url_scanner.re
index dd40b9172c..23b672bb9c 100644
--- a/ext/standard/url_scanner.re
+++ b/ext/standard/url_scanner.re
@@ -88,7 +88,8 @@ static void screw_url(lexdata *state)
/* search outer limits for URI */
for(p = state->start; p < state->crs && (c = *p); p++)
- if(c != '"' && c != ' ') break;
+ if(!isspace(c)) break;
+ if(c=='"') p++;
/*
* we look at q-1, because q points to the character behind the last
@@ -97,7 +98,10 @@ static void screw_url(lexdata *state)
*/
for(q = state->crs; q > state->start && (c = *(q-1)); q--)
- if(c != '"' && c != ' ') break;
+ if(!isspace(c)) break;
+ if(c=='"') q--;
+
+ if(q<p) { p=state->start; q=state->crs; }
/* attach beginning */