com php-src: Fixed segfault in file_get_contents: main/ streams/streams.c main/streams/transports.c

From: Date: Fri, 21 Feb 2014 08:32:46 +0000
Subject: com php-src: Fixed segfault in file_get_contents: main/ streams/streams.c main/streams/transports.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-78039@lists.php.net to get a copy of this message
Commit: 29e2ce597be8aad45f009cf72b1b6c2b8681de23 Author: Xinchen Hui <laruence@gmail.com> Fri, 21 Feb 2014 16:32:46 +0800 Parents: 15e9bfa048bd69024f5efb592a3a427285cb72fa Branches: phpng Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=29e2ce597be8aad45f009cf72b1b6c2b8681de23 Log: Fixed segfault in file_get_contents Changed paths: M main/streams/streams.c M main/streams/transports.c Diff: diff --git a/main/streams/streams.c b/main/streams/streams.c index 8fa601a..fe592c5 100644 --- a/main/streams/streams.c +++ b/main/streams/streams.c @@ -232,7 +232,7 @@ void php_stream_display_wrapper_errors(php_stream_wrapper *wrapper, const char * void php_stream_tidy_wrapper_error_log(php_stream_wrapper *wrapper TSRMLS_DC) { if (wrapper && FG(wrapper_errors)) { - zend_hash_str_del(FG(wrapper_errors), (const char*)&wrapper, sizeof wrapper); + zend_hash_str_del(FG(wrapper_errors), (const char*)&wrapper, sizeof(wrapper)); } } @@ -241,6 +241,12 @@ static void wrapper_error_dtor(void *error) efree(*(char**)error); } +static void wrapper_list_dtor(zval *item) { + zend_llist *list = (zend_llist*)Z_PTR_P(item); + zend_llist_destroy(list); + efree(list); +} + PHPAPI void php_stream_wrapper_log_error(php_stream_wrapper *wrapper, int options TSRMLS_DC, const char *fmt, ...) { va_list args; @@ -257,18 +263,16 @@ PHPAPI void php_stream_wrapper_log_error(php_stream_wrapper *wrapper, int option zend_llist *list = NULL; if (!FG(wrapper_errors)) { ALLOC_HASHTABLE(FG(wrapper_errors)); - zend_hash_init(FG(wrapper_errors), 8, NULL, - (dtor_func_t)zend_llist_destroy, 0); + zend_hash_init(FG(wrapper_errors), 8, NULL, wrapper_list_dtor, 0); } else { - list = zend_hash_str_find_ptr(FG(wrapper_errors), (const char*)&wrapper, - sizeof wrapper); + list = zend_hash_str_find_ptr(FG(wrapper_errors), (const char*)&wrapper, sizeof(wrapper)); } if (!list) { zend_llist new_list; - zend_llist_init(&new_list, sizeof buffer, wrapper_error_dtor, 0); - zend_hash_str_update_mem(FG(wrapper_errors), (const char*)&wrapper, - sizeof wrapper, &new_list, sizeof new_list); + zend_llist_init(&new_list, sizeof(buffer), wrapper_error_dtor, 0); + list = zend_hash_str_update_mem(FG(wrapper_errors), (const char*)&wrapper, + sizeof(wrapper), &new_list, sizeof(new_list)); } /* append to linked list */ diff --git a/main/streams/transports.c b/main/streams/transports.c index 6588cb9..7ede940 100644 --- a/main/streams/transports.c +++ b/main/streams/transports.c @@ -58,7 +58,7 @@ PHPAPI php_stream *_php_stream_xport_create(const char *name, size_t namelen, in STREAMS_DC TSRMLS_DC) { php_stream *stream = NULL; - php_stream_transport_factory *factory = NULL; + php_stream_transport_factory factory; const char *p, *protocol = NULL; int n = 0, failed = 0; char *error_text = NULL; @@ -129,7 +129,7 @@ PHPAPI php_stream *_php_stream_xport_create(const char *name, size_t namelen, in return NULL; } - stream = (*factory)(protocol, n, + stream = (factory)(protocol, n, (char*)name, namelen, persistent_id, options, flags, timeout, context STREAMS_REL_CC TSRMLS_CC);

« previous php.cvs (#78039) next »