Partial fix based on the patch and discussions in #2788319
This commit is contained in:
parent
042b545247
commit
f7149d1830
@ -88,14 +88,23 @@ _libssh2_channel_nextid(LIBSSH2_SESSION * session)
|
|||||||
* Locate a channel pointer by number
|
* Locate a channel pointer by number
|
||||||
*/
|
*/
|
||||||
LIBSSH2_CHANNEL *
|
LIBSSH2_CHANNEL *
|
||||||
_libssh2_channel_locate(LIBSSH2_SESSION * session, unsigned long channel_id)
|
_libssh2_channel_locate(LIBSSH2_SESSION *session, unsigned long channel_id)
|
||||||
{
|
{
|
||||||
LIBSSH2_CHANNEL *channel = session->channels.head;
|
LIBSSH2_CHANNEL *channel;
|
||||||
while (channel) {
|
LIBSSH2_LISTENER *listener;
|
||||||
if (channel->local.id == channel_id) {
|
|
||||||
|
for(channel = session->channels.head; channel; channel = channel->next) {
|
||||||
|
if (channel->local.id == channel_id)
|
||||||
return channel;
|
return channel;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* We didn't find the channel in the session, let's then check its
|
||||||
|
listeners... */
|
||||||
|
for(listener = session->listeners; listener; listener = listener->next) {
|
||||||
|
for(channel = listener->queue; channel; channel = channel->next) {
|
||||||
|
if (channel->local.id == channel_id)
|
||||||
|
return channel;
|
||||||
}
|
}
|
||||||
channel = channel->next;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -779,6 +788,8 @@ channel_forward_accept(LIBSSH2_LISTENER *listener)
|
|||||||
return channel;
|
return channel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
libssh2_error(listener->session, LIBSSH2_ERROR_CHANNEL_UNKNOWN,
|
||||||
|
"Channel not found", 0);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user