com php-src: remove hardcoded limit on number of pipes in proc_open(): ext/standard/proc_open.c ext/stand ard/proc_open.h
| From: | Antony Dovgal | Date: | Fri, 29 May 2015 12:30:06 +0000 |
| Subject: | com php-src: remove hardcoded limit on number of pipes in proc_open(): ext/standard/proc_open.c ext/stand ard/proc_open.h | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-86996@lists.php.net to get a copy of this message | ||
Commit: ad60549958bf1dafdff79431d52af28385a39c9c
Author: Antony Dovgal <tony2001@php.net> Thu, 18 Dec 2014 15:28:01 +0300
Parents: 6f46fa376bc3452617fa566917320237b687fd7e
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=ad60549958bf1dafdff79431d52af28385a39c9c
Log:
remove hardcoded limit on number of pipes in proc_open()
Changed paths:
M ext/standard/proc_open.c
M ext/standard/proc_open.h
Diff:
diff --git a/ext/standard/proc_open.c b/ext/standard/proc_open.c
index d774808..bbcdd10 100644
--- a/ext/standard/proc_open.c
+++ b/ext/standard/proc_open.c
@@ -240,6 +240,7 @@ static void proc_open_rsrc_dtor(zend_resource *rsrc)
FG(pclose_ret) = -1;
#endif
_php_free_envp(proc->env, proc->is_persistent);
+ pefree(proc->pipes, proc->is_persistent);
pefree(proc->command, proc->is_persistent);
pefree(proc, proc->is_persistent);
@@ -434,7 +435,8 @@ PHP_FUNCTION(proc_open)
zval *descitem = NULL;
zend_string *str_index;
zend_ulong nindex;
- struct php_proc_open_descriptor_item descriptors[PHP_PROC_OPEN_MAX_DESCRIPTORS];
+ struct php_proc_open_descriptor_item *descriptors = NULL;
+ int ndescriptors_array;
#ifdef PHP_WIN32
PROCESS_INFORMATION pi;
HANDLE childHandle;
@@ -499,7 +501,11 @@ PHP_FUNCTION(proc_open)
memset(&env, 0, sizeof(env));
}
- memset(descriptors, 0, sizeof(descriptors));
+ ndescriptors_array = zend_hash_num_elements(Z_ARRVAL_P(descriptorspec));
+
+ descriptors = safe_emalloc(sizeof(struct php_proc_open_descriptor_item), ndescriptors_array, 0);
+
+ memset(descriptors, 0, sizeof(struct php_proc_open_descriptor_item) * ndescriptors_array);
#ifdef PHP_WIN32
/* we use this to allow the child to inherit handles */
@@ -669,9 +675,7 @@ PHP_FUNCTION(proc_open)
goto exit_fail;
}
}
-
- if (++ndesc == PHP_PROC_OPEN_MAX_DESCRIPTORS)
- break;
+ ndesc++;
} ZEND_HASH_FOREACH_END();
#ifdef PHP_WIN32
@@ -875,6 +879,7 @@ PHP_FUNCTION(proc_open)
proc = (struct php_process_handle*)pemalloc(sizeof(struct php_process_handle), is_persistent);
proc->is_persistent = is_persistent;
proc->command = command;
+ proc->pipes = pemalloc(sizeof(zend_resource *) * ndesc, is_persistent);
proc->npipes = ndesc;
proc->child = child;
#ifdef PHP_WIN32
@@ -952,10 +957,12 @@ PHP_FUNCTION(proc_open)
}
}
+ efree(descriptors);
ZVAL_RES(return_value, zend_register_resource(proc, le_proc_open));
return;
exit_fail:
+ efree(descriptors);
_php_free_envp(env, is_persistent);
pefree(command, is_persistent);
#if PHP_CAN_DO_PTS
diff --git a/ext/standard/proc_open.h b/ext/standard/proc_open.h
index 13177ce..52e5c1e 100644
--- a/ext/standard/proc_open.h
+++ b/ext/standard/proc_open.h
@@ -25,8 +25,6 @@ typedef int php_file_descriptor_t;
typedef pid_t php_process_id_t;
#endif
-#define PHP_PROC_OPEN_MAX_DESCRIPTORS 16
-
/* Environment block under win32 is a NUL terminated sequence of NUL terminated
* name=value strings.
* Under unix, it is an argv style array.
@@ -44,7 +42,7 @@ struct php_process_handle {
HANDLE childHandle;
#endif
int npipes;
- zend_resource *pipes[PHP_PROC_OPEN_MAX_DESCRIPTORS];
+ zend_resource **pipes;
char *command;
int is_persistent;
php_process_env_t env;