diff --git a/libfreerdp/core/listener.c b/libfreerdp/core/listener.c index 88be8ed54..d8551473c 100644 --- a/libfreerdp/core/listener.c +++ b/libfreerdp/core/listener.c @@ -258,11 +258,15 @@ static BOOL freerdp_listener_get_fds(freerdp_listener* instance, void** rfds, in int freerdp_listener_get_event_handles(freerdp_listener* instance, HANDLE* events, DWORD* nCount) { int index; + DWORD count = *nCount; rdpListener* listener = (rdpListener*) instance->listener; if (listener->num_sockfds < 1) return -1; + if (listener->num_sockfds > count) + return -1; + for (index = 0; index < listener->num_sockfds; index++) { events[*nCount] = listener->events[index]; diff --git a/server/Sample/sfreerdp.c b/server/Sample/sfreerdp.c index 19ee553c0..4c8b3d02d 100644 --- a/server/Sample/sfreerdp.c +++ b/server/Sample/sfreerdp.c @@ -744,7 +744,7 @@ static void test_server_mainloop(freerdp_listener* instance) while (1) { - count = 0; + count = 32; if (instance->GetEventHandles(instance, handles, &count)) { diff --git a/server/shadow/shadow_server.c b/server/shadow/shadow_server.c index a0c560a19..38cbfbfff 100644 --- a/server/shadow/shadow_server.c +++ b/server/shadow/shadow_server.c @@ -313,7 +313,7 @@ void* shadow_server_thread(rdpShadowServer* server) while (1) { - nCount = 0; + nCount = 32; if (listener->GetEventHandles(listener, events, &nCount) < 0) {