sesser Tue Sep 10 04:06:26 2002 EDT
Modified files:
/php4/ext/standard url.c
Log:
php_url_parse() replaces controlchars with '_' now. This stops fopen wrapper
CR/LF injection issues.
Index: php4/ext/standard/url.c
diff -u php4/ext/standard/url.c:1.51 php4/ext/standard/url.c:1.52
--- php4/ext/standard/url.c:1.51 Thu Feb 28 03:26:49 2002
+++ php4/ext/standard/url.c Tue Sep 10 04:06:25 2002
@@ -15,7 +15,7 @@
| Author: Jim Winstead <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
-/* $Id: url.c,v 1.51 2002/02/28 08:26:49 sebastian Exp $ */
+/* $Id: url.c,v 1.52 2002/09/10 08:06:25 sesser Exp $ */
#include <stdlib.h>
#include <string.h>
@@ -58,6 +58,29 @@
}
/* }}} */
+/* {{{ php_replace_controlchars
+ */
+PHPAPI char *php_replace_controlchars(char *str)
+{
+ unsigned char *s = (unsigned char *)str;
+
+ if (!str) {
+ return (NULL);
+ }
+
+ while (*s) {
+
+ if (iscntrl(*s)) {
+ *s='_';
+ }
+ s++;
+ }
+
+ return (str);
+}
+/* }}} */
+
+
/* {{{ php_url_parse
*/
PHPAPI php_url *php_url_parse(char *str)
@@ -87,21 +110,25 @@
/* no processing necessary on the scheme */
if (subs[2].rm_so != -1 && subs[2].rm_so <= length) {
ret->scheme = estrndup(str + subs[2].rm_so, subs[2].rm_eo -
subs[2].rm_so);
+ php_replace_controlchars(ret->scheme);
}
/* the path to the resource */
if (subs[5].rm_so != -1 && subs[5].rm_so <= length) {
ret->path = estrndup(str + subs[5].rm_so, subs[5].rm_eo -
subs[5].rm_so);
+ php_replace_controlchars(ret->path);
}
/* the query part */
if (subs[7].rm_so != -1 && subs[7].rm_so <= length) {
ret->query = estrndup(str + subs[7].rm_so, subs[7].rm_eo -
subs[7].rm_so);
+ php_replace_controlchars(ret->query);
}
/* the fragment */
if (subs[9].rm_so != -1 && subs[9].rm_so <= length) {
ret->fragment = estrndup(str + subs[9].rm_so, subs[9].rm_eo -
subs[9].rm_so);
+ php_replace_controlchars(ret->fragment);
}
/* extract the username, pass, and port from the hostname */
@@ -130,14 +157,18 @@
/* now deal with all of the results */
if (subs[2].rm_so != -1 && subs[2].rm_so < length) {
ret->user = estrndup(result + subs[2].rm_so,
subs[2].rm_eo - subs[2].rm_so);
+ php_replace_controlchars(ret->user);
}
if (subs[4].rm_so != -1 && subs[4].rm_so < length) {
ret->pass = estrndup(result + subs[4].rm_so,
subs[4].rm_eo - subs[4].rm_so);
+ php_replace_controlchars(ret->pass);
}
if (subs[7].rm_so != -1 && subs[7].rm_so < length) {
ret->host = estrndup(result + subs[7].rm_so,
subs[7].rm_eo - subs[7].rm_so);
+ php_replace_controlchars(ret->host);
} else if (subs[8].rm_so != -1 && subs[8].rm_so < length) {
ret->host = estrndup(result + subs[8].rm_so,
subs[8].rm_eo - subs[8].rm_so);
+ php_replace_controlchars(ret->host);
}
if (subs[10].rm_so != -1 && subs[10].rm_so < length) {
ret->port = (unsigned short) strtol(result +
subs[10].rm_so, NULL, 10);
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php