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

Reply via email to