diff --git a/ssh2.c b/ssh2.c index 8bd51cb..afd29b9 100644 --- a/ssh2.c +++ b/ssh2.c @@ -992,8 +992,14 @@ PHP_FUNCTION(ssh2_poll) pollfds[i].events = Z_LVAL_P(tmpzval); hash_key_zstring = zend_string_init("resource", sizeof("resource") - 1, 0); - if ((tmpzval = zend_hash_find(Z_ARRVAL_P(subarray), hash_key_zstring)) == NULL || Z_TYPE_P(tmpzval) != IS_REFERENCE - || (tmpzval = Z_REFVAL_P(tmpzval)) == NULL || Z_TYPE_P(tmpzval) != IS_RESOURCE) { + if ((tmpzval = zend_hash_find(Z_ARRVAL_P(subarray), hash_key_zstring)) == NULL) { + php_error_docref(NULL, E_WARNING, "Invalid data in subarray, no resource element, or not of type resource"); + numfds--; + zend_string_release(hash_key_zstring); + continue; + } + ZVAL_DEREF(tmpzval); + if (Z_TYPE_P(tmpzval) != IS_RESOURCE) { php_error_docref(NULL, E_WARNING, "Invalid data in subarray, no resource element, or not of type resource"); numfds--; zend_string_release(hash_key_zstring); diff --git a/tests/ssh2_poll.phpt b/tests/ssh2_poll.phpt new file mode 100644 index 0000000..fd9b9f1 --- /dev/null +++ b/tests/ssh2_poll.phpt @@ -0,0 +1,34 @@ +--TEST-- +ssh2_poll() - Tests polling a channel for events +--SKIPIF-- + +--FILE-- + $stream, + 'events' => SSH2_POLLIN, + ), +); +$ready = ssh2_poll($polldesc, 5); +var_dump(is_int($ready)); +var_dump($ready >= 0); + +echo "**Poll result has revents\n"; +var_dump(array_key_exists('revents', $polldesc[0])); + +fclose($stream); +--EXPECT-- +**Poll with direct resource +bool(true) +bool(true) +**Poll result has revents +bool(true)