mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Fixed segfault of stream handling
This commit is contained in:
parent
4c4dc8e239
commit
83d450c78d
4 changed files with 9 additions and 5 deletions
|
@ -200,7 +200,7 @@ MYSQLND_METHOD(mysqlnd_net, open_tcp_or_unix)(MYSQLND_NET * const net, const cha
|
|||
*/
|
||||
zend_resource *le;
|
||||
|
||||
if ((le = zend_hash_str_find(&EG(persistent_list), hashed_details, hashed_details_len))) {
|
||||
if ((le = zend_hash_str_find_ptr(&EG(persistent_list), hashed_details, hashed_details_len))) {
|
||||
/*
|
||||
in_free will let streams code skip destructing - big HACK,
|
||||
but STREAMS suck big time regarding persistent streams.
|
||||
|
@ -223,7 +223,7 @@ MYSQLND_METHOD(mysqlnd_net, open_tcp_or_unix)(MYSQLND_NET * const net, const cha
|
|||
unregistered yntil the script ends. So, we need to take care of that.
|
||||
*/
|
||||
net_stream->in_free = 1;
|
||||
zend_hash_index_del(&EG(regular_list), net_stream->res->handle); /* ToDO: should it be res->handle, do streams register with addref ?*/
|
||||
//????zend_hash_index_del(&EG(regular_list), net_stream->res->handle); /* ToDO: should it be res->handle, do streams register with addref ?*/
|
||||
net_stream->in_free = 0;
|
||||
|
||||
DBG_RETURN(net_stream);
|
||||
|
|
|
@ -1800,7 +1800,6 @@ MYSQLND_METHOD(mysqlnd_res, fetch_into)(MYSQLND_RES * result, const unsigned int
|
|||
Hint Zend how many elements we will have in the hash. Thus it won't
|
||||
extend and rehash the hash constantly.
|
||||
*/
|
||||
ZVAL_NEW_ARR(return_value);
|
||||
array_init_size(return_value, mysqlnd_num_fields(result) * 2);
|
||||
if (FAIL == result->m.fetch_row(result, (void *)return_value, flags, &fetched_anything TSRMLS_CC)) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error while reading a row");
|
||||
|
@ -1868,7 +1867,6 @@ MYSQLND_METHOD(mysqlnd_res, fetch_all)(MYSQLND_RES * result, const unsigned int
|
|||
}
|
||||
|
||||
/* 4 is a magic value. The cast is safe, if larger then the array will be later extended - no big deal :) */
|
||||
ZVAL_NEW_ARR(return_value);
|
||||
array_init_size(return_value, set? (unsigned int) set->row_count : 4);
|
||||
|
||||
do {
|
||||
|
|
|
@ -1760,24 +1760,30 @@ php_mysqlnd_rowp_read_text_protocol_aux(MYSQLND_MEMORY_POOL_CHUNK * row_buffer,
|
|||
bit_area += 1 + sprintf((char *)start, "%ld", Z_LVAL_P(current_field));
|
||||
//???? ZVAL_STRINGL(current_field, (char *) start, bit_area - start - 1, copy_data);
|
||||
ZVAL_STRINGL(current_field, (char *) start, bit_area - start - 1);
|
||||
/*
|
||||
if (!copy_data) {
|
||||
efree(start);
|
||||
}
|
||||
*/
|
||||
} else if (Z_TYPE_P(current_field) == IS_STRING){
|
||||
memcpy(bit_area, Z_STRVAL_P(current_field), Z_STRLEN_P(current_field));
|
||||
bit_area += Z_STRLEN_P(current_field);
|
||||
*bit_area++ = '\0';
|
||||
zval_dtor(current_field);
|
||||
ZVAL_STRINGL(current_field, (char *) start, bit_area - start - 1);
|
||||
/*
|
||||
if (!copy_data) {
|
||||
efree(start);
|
||||
}
|
||||
*/
|
||||
}
|
||||
} else {
|
||||
ZVAL_STRINGL(current_field, (char *)p, len);
|
||||
/*
|
||||
if (!copy_data) {
|
||||
efree(p);
|
||||
}
|
||||
*/
|
||||
}
|
||||
p += len;
|
||||
last_field_was_string = TRUE;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue