iliaa           Sun Feb 18 18:08:22 2007 UTC

  Modified files:              (Branch: PHP_5_2)
    /php-src/sapi/cgi   cgi_main.c 
  Log:
  
  Eliminate strcat() usage
  Fixed handling of argv[] for GET 
  
  
http://cvs.php.net/viewvc.cgi/php-src/sapi/cgi/cgi_main.c?r1=1.267.2.15.2.23&r2=1.267.2.15.2.24&diff_format=u
Index: php-src/sapi/cgi/cgi_main.c
diff -u php-src/sapi/cgi/cgi_main.c:1.267.2.15.2.23 
php-src/sapi/cgi/cgi_main.c:1.267.2.15.2.24
--- php-src/sapi/cgi/cgi_main.c:1.267.2.15.2.23 Fri Feb 16 11:30:03 2007
+++ php-src/sapi/cgi/cgi_main.c Sun Feb 18 18:08:22 2007
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: cgi_main.c,v 1.267.2.15.2.23 2007/02/16 11:30:03 dmitry Exp $ */
+/* $Id: cgi_main.c,v 1.267.2.15.2.24 2007/02/18 18:08:22 iliaa Exp $ */
 
 #include "php.h"
 #include "php_globals.h"
@@ -858,11 +858,11 @@
                                                        env_script_name = pt + 
l;
 
                                                        /* PATH_TRANSATED = 
DOCUMENT_ROOT + PATH_INFO */
-                                                       path_translated_len = l 
+ strlen(env_path_info) + 2;
-                                                       path_translated = (char 
*) emalloc(path_translated_len);
-                                                       *path_translated = 0;
-                                                       
strncat(path_translated, env_document_root, l);
-                                                       strcat(path_translated, 
env_path_info);
+                                                       path_translated_len = l 
+ strlen(env_path_info);
+                                                       path_translated = (char 
*) emalloc(path_translated_len + 1);
+                                                       memcpy(path_translated, 
env_document_root, l);
+                                                       memcpy(path_translated 
+ l, env_path_info, (path_translated_len - l));
+                                                       
path_translated[path_translated_len] = '\0';
                                                        if 
(orig_path_translated) {
                                                                
_sapi_cgibin_putenv("ORIG_PATH_TRANSLATED", orig_path_translated TSRMLS_CC);
                                                        }
@@ -873,13 +873,13 @@
                                                ) {
                                                        /* PATH_TRANSATED = 
PATH_TRANSATED - SCRIPT_NAME + PATH_INFO */
                                                        int ptlen = strlen(pt) 
- strlen(env_script_name);
-                                                       int path_translated_len 
= ptlen + strlen(env_path_info) + 2;
+                                                       int path_translated_len 
= ptlen + strlen(env_path_info);
                                                        char *path_translated = 
NULL;
 
-                                                       path_translated = (char 
*) emalloc(path_translated_len);
-                                                       *path_translated = 0;
-                                                       
strncat(path_translated, pt, ptlen);
-                                                       strcat(path_translated, 
env_path_info);
+                                                       path_translated = (char 
*) emalloc(path_translated_len + 1);
+                                                       memcpy(path_translated, 
pt, ptlen);
+                                                       memcpy(path_translated 
+ ptlen, env_path_info, path_translated_len - ptlen);
+                                                       
path_translated[path_translated_len] = '\0';
                                                        if 
(orig_path_translated) {
                                                                
_sapi_cgibin_putenv("ORIG_PATH_TRANSLATED", orig_path_translated TSRMLS_CC);
                                                        }
@@ -1626,17 +1626,22 @@
                           test.php v1=test "v2=hello world!"
                        */
                        if (!SG(request_info).query_string && argc > 
php_optind) {
+                               int slen = strlen(PG(arg_separator).input);
                                len = 0;
                                for (i = php_optind; i < argc; i++) {
-                                       len += strlen(argv[i]) + 1;
+                                       if (i < (argc - 1)) {
+                                               len += strlen(argv[i]) + slen;
+                                       } else {
+                                               len += strlen(argv[i]);
+                                       }
                                }
 
-                               s = malloc(len + 1);
+                               s = malloc(++len + 1);
                                *s = '\0';                      /* we are 
pretending it came from the environment  */
-                               for (i = php_optind, len = 0; i < argc; i++) {
-                                       strcat(s, argv[i]);
+                               for (i = php_optind; i < argc; i++) {
+                                       strlcat(s, argv[i], len);
                                        if (i < (argc - 1)) {
-                                               strcat(s, 
PG(arg_separator).input);
+                                               strlcat(s, 
PG(arg_separator).input, len);
                                        }
                                }
                                SG(request_info).query_string = s;

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to