rdp: Fix the ContextNew callback with recent FreeRDP versions
Since a quite long time FreeRDP expect the ContextNew callback to return TRUE when it succeeds. Without this we have some arbitrary failures (most probably when eax is 0 at the end of the function). Signed-off-by: David Fort <contact@hardening-consulting.com>
This commit is contained in:
committed by
Bryce Harrington
parent
58b63ab7f1
commit
2d4aa83fe1
+18
-1
@@ -587,7 +587,7 @@ int rdp_implant_listener(struct rdp_backend *b, freerdp_listener* instance)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static FREERDP_CB_RET_TYPE
|
||||||
rdp_peer_context_new(freerdp_peer* client, RdpPeerContext* context)
|
rdp_peer_context_new(freerdp_peer* client, RdpPeerContext* context)
|
||||||
{
|
{
|
||||||
context->item.peer = client;
|
context->item.peer = client;
|
||||||
@@ -598,15 +598,32 @@ rdp_peer_context_new(freerdp_peer* client, RdpPeerContext* context)
|
|||||||
#else
|
#else
|
||||||
context->rfx_context = rfx_context_new(TRUE);
|
context->rfx_context = rfx_context_new(TRUE);
|
||||||
#endif
|
#endif
|
||||||
|
if (!context->rfx_context) {
|
||||||
|
FREERDP_CB_RETURN(FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
context->rfx_context->mode = RLGR3;
|
context->rfx_context->mode = RLGR3;
|
||||||
context->rfx_context->width = client->settings->DesktopWidth;
|
context->rfx_context->width = client->settings->DesktopWidth;
|
||||||
context->rfx_context->height = client->settings->DesktopHeight;
|
context->rfx_context->height = client->settings->DesktopHeight;
|
||||||
rfx_context_set_pixel_format(context->rfx_context, RDP_PIXEL_FORMAT_B8G8R8A8);
|
rfx_context_set_pixel_format(context->rfx_context, RDP_PIXEL_FORMAT_B8G8R8A8);
|
||||||
|
|
||||||
context->nsc_context = nsc_context_new();
|
context->nsc_context = nsc_context_new();
|
||||||
|
if (!context->nsc_context)
|
||||||
|
goto out_error_nsc;
|
||||||
|
|
||||||
nsc_context_set_pixel_format(context->nsc_context, RDP_PIXEL_FORMAT_B8G8R8A8);
|
nsc_context_set_pixel_format(context->nsc_context, RDP_PIXEL_FORMAT_B8G8R8A8);
|
||||||
|
|
||||||
context->encode_stream = Stream_New(NULL, 65536);
|
context->encode_stream = Stream_New(NULL, 65536);
|
||||||
|
if (!context->encode_stream)
|
||||||
|
goto out_error_stream;
|
||||||
|
|
||||||
|
FREERDP_CB_RETURN(TRUE);
|
||||||
|
|
||||||
|
out_error_nsc:
|
||||||
|
rfx_context_free(context->rfx_context);
|
||||||
|
out_error_stream:
|
||||||
|
nsc_context_free(context->nsc_context);
|
||||||
|
FREERDP_CB_RETURN(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
Reference in New Issue
Block a user