]> granicus.if.org Git - php/commitdiff
- Simplified a bit and fixed possible memory corruption and definate leak.
authorJani Taskinen <jani@php.net>
Thu, 10 Sep 2009 16:19:42 +0000 (16:19 +0000)
committerJani Taskinen <jani@php.net>
Thu, 10 Sep 2009 16:19:42 +0000 (16:19 +0000)
main/fopen_wrappers.c
sapi/cgi/cgi_main.c

index b7cd6dceb23b19f77b1ab5efd1a8709df476cb1f..8eea02fc2120acdf900a300688e3dda65f32e578 100644 (file)
@@ -437,6 +437,7 @@ PHPAPI int php_fopen_primary_script(zend_file_handle *file_handle TSRMLS_DC)
 
        file_handle->opened_path = expand_filepath(filename, NULL TSRMLS_CC);
 
+       STR_FREE(SG(request_info).path_translated);     /* for same reason as above */
        SG(request_info).path_translated = filename;
 
        file_handle->filename = SG(request_info).path_translated;
index 7d447193fb62a7b04351de0c6795dbdfbe97b9db..218d331ce018fab9a45a4e8f6e9ed78acaf6fed2 100644 (file)
@@ -1277,9 +1277,6 @@ static void init_request_info(TSRMLS_D)
                                if (pt) {
                                        efree(pt);
                                }
-                               if (is_valid_path(script_path_translated)) {
-                                       SG(request_info).path_translated = estrdup(script_path_translated);
-                               }
                        } else {
                                /* make sure path_info/translated are empty */
                                if (!orig_script_filename ||
@@ -1308,9 +1305,6 @@ static void init_request_info(TSRMLS_D)
                                } else {
                                        SG(request_info).request_uri = env_script_name;
                                }
-                               if (is_valid_path(script_path_translated)) {
-                                       SG(request_info).path_translated = estrdup(script_path_translated);
-                               }
                                free(real_path);
                        }
                } else {
@@ -1323,9 +1317,10 @@ static void init_request_info(TSRMLS_D)
                        if (!CGIG(discard_path) && env_path_translated) {
                                script_path_translated = env_path_translated;
                        }
-                       if (is_valid_path(script_path_translated)) {
-                               SG(request_info).path_translated = estrdup(script_path_translated);
-                       }
+               }
+
+               if (is_valid_path(script_path_translated)) {
+                       SG(request_info).path_translated = estrdup(script_path_translated);
                }
 
                SG(request_info).request_method = sapi_cgibin_getenv("REQUEST_METHOD", sizeof("REQUEST_METHOD")-1 TSRMLS_CC);
@@ -2125,26 +2120,14 @@ consult the installation file that came with this distribution, or visit \n\
 
 fastcgi_request_done:
                        {
-                               char *path_translated;
-
-                               /* Go through this trouble so that the memory manager doesn't warn
-                                * about SG(request_info).path_translated leaking
-                                */
-                               if (SG(request_info).path_translated) {
-                                       path_translated = strdup(SG(request_info).path_translated);
-                                       STR_FREE(SG(request_info).path_translated);
-                                       SG(request_info).path_translated = path_translated;
-                               }
+                               STR_FREE(SG(request_info).path_translated);
 
                                php_request_shutdown((void *) 0);
+
                                if (exit_status == 0) {
                                        exit_status = EG(exit_status);
                                }
 
-                               if (SG(request_info).path_translated) {
-                                       free(SG(request_info).path_translated);
-                                       SG(request_info).path_translated = NULL;
-                               }
                                if (free_query_string && SG(request_info).query_string) {
                                        free(SG(request_info).query_string);
                                        SG(request_info).query_string = NULL;